реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Linker не находит memmove, free, malloc ...
tobias_ivan
сообщение Jun 21 2006, 07:57
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 150
Регистрация: 7-09-05
Из: Россия, г.Новороссийск
Пользователь №: 8 321



В проекте в закладке Library Configuration устанавливаю значение Library равным Full DLIB, для того чтобы использовать Extended Embedded C++. При этом при линковке проекта получаю сообщение:
Error[e46]: Undefined external "malloc(size_t)" referred in main ( D:\Tobias\testiar\Debug\Obj\main.r90 )
Error[e46]: Undefined external "free(void *)" referred in main ( D:\Tobias\testiar\Debug\Obj\main.r90 )

Вот текст тестового примера:
#include <stdlib.h>
int main()
{
char *temp;
temp = (char *)malloc(512);
temp[2] = 56;
free(temp);
return 0;
}

Как быть?
Заранее всем спасибо.

ЗЫ. Реальный проект содержит "навороты" под Extended Embedded C++ и при этом используются memmove(), free() и про
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jun 21 2006, 09:31
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(tobias_ivan @ Jun 21 2006, 10:57) *
В проекте в закладке Library Configuration устанавливаю значение Library равным Full DLIB, для того чтобы использовать Extended Embedded C++. При этом при линковке проекта получаю сообщение:
Error[e46]: Undefined external "malloc(size_t)" referred in main ( D:\Tobias\testiar\Debug\Obj\main.r90 )
Error[e46]: Undefined external "free(void *)" referred in main ( D:\Tobias\testiar\Debug\Obj\main.r90 )
Как быть?
Заранее всем спасибо.

ЗЫ. Реальный проект содержит "навороты" под Extended Embedded C++ и при этом используются memmove(), free() и про

Ну, так это и должно быть. В Си++ Си-шные функции по-другому описываются, типа:
Код
extern "C"
        {
....................
        }

А есть ли такое в вашей версии? Я пользуюсь версией 3.20, там в stdlib.h никакой связи с Си++ нет.

Сообщение отредактировал _Bill - Jun 21 2006, 09:32
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 21 2006, 09:36
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



А чем не устраивают new/delete?
Go to the top of the page
 
+Quote Post
tobias_ivan
сообщение Jun 21 2006, 09:53
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 150
Регистрация: 7-09-05
Из: Россия, г.Новороссийск
Пользователь №: 8 321



2_Bill: И в моей нет, вопрос в этом и заключается: как использовать функции библиотек stdlib.h и string.h
IgorKossak: Устраивают, только проблема не только с malloc и free. Таже проблема с функциями memset, memmove, strlen, strncpy и др.
Что можно использовать взамен?
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jun 21 2006, 10:08
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(tobias_ivan @ Jun 21 2006, 12:53) *
2_Bill: И в моей нет, вопрос в этом и заключается: как использовать функции библиотек stdlib.h и string.h
IgorKossak: Устраивают, только проблема не только с malloc и free. Таже проблема с функциями memset, memmove, strlen, strncpy и др.
Что можно использовать взамен?

Видимо придется добавить самому. Вот пример stdlib.h от Borland
Код
#ifdef __cplusplus
extern "C" {
#endif
........
void *        _RTLENTRY _EXPFUNC malloc(_SIZE_T __size);
.....
#ifdef __cplusplus
}
#endif
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 21 2006, 10:49
Сообщение #6


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



tobias_ivan, у меня эти функции работают без проблем.
Посмотрел на свой stdlib.h - там уже есть обёртка, о которой писал _Bill.
Может у Вас хедер берётся не оттуда? Посмотрите настройки путей.

stdlib.h в папках inc\clib и inc\dlib разные!
Go to the top of the page
 
+Quote Post
tobias_ivan
сообщение Jun 21 2006, 11:03
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 150
Регистрация: 7-09-05
Из: Россия, г.Новороссийск
Пользователь №: 8 321



ТОЧНО!

указал
#include "dlib\string.h"
#include "dlib\stdlib.h"

все собралось!

Спасибо _Bill и IgorKossak, a14.gif
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jun 21 2006, 11:27
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(IgorKossak @ Jun 21 2006, 13:49) *
stdlib.h в папках inc\clib и inc\dlib разные!

Спасибо! Учту на будущее.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 21 2006, 16:07
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(tobias_ivan @ Jun 21 2006, 14:03) *
ТОЧНО!

указал
#include "dlib\string.h"
#include "dlib\stdlib.h"

все собралось!

Спасибо _Bill и IgorKossak, a14.gif
Тогда точно что-то странное у вас в настройках проекта. Вы не указали версию, но посмотрите на закладке Preprocessor компилятора куда указывает стандартный путь поиска библиотек и не стоит ли там галочка игнорировать его. У меня (4.10b) при смене библиотеки с clib на dlib путь по умолчанию автоматом сам переключается в нужные подкаталоги($TOOLKIT_DIR$\INC\;$TOOLKIT_DIR$\INC\DLIB\ vs $TOOLKIT_DIR$\INC\;$TOOLKIT_DIR$\INC\CLIB\).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 21 2006, 16:11
Сообщение #10


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Могу предположить, что tobias_ivan не в IDE работает.
А то действительно всё бы автоматом получалось.
Go to the top of the page
 
+Quote Post
tobias_ivan
сообщение Jun 22 2006, 10:19
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 150
Регистрация: 7-09-05
Из: Россия, г.Новороссийск
Пользователь №: 8 321



Цитата(IgorKossak @ Jun 21 2006, 20:11) *
Могу предположить, что tobias_ivan не в IDE работает.
А то действительно всё бы автоматом получалось.


Работаю в IAR EWAVR IDE версия 4.12а.
Пока писал отмазку, понял в чем дело. biggrin.gif

Наверное читали мою тему IAR + Win2000. В процессе поиска возможной проблемы пробовали раличные варианты, в том числе и сборку из командной строки (предложенной кстати буржуями). При этом заметили, что проект собирался, если из команды исключить ключ -I. Это сработало для проектов без заголовочных файлов. Затем оставили только опцию -I $TOOLKIT_DIR$\INC\, и проект собрался. А вот с опцией -I $TOOLKIT_DIR$\INC\CLIB ну не хотел... Тогда скопировали файлы из CLIB в INC и проект собрался из командной строки. Скопировали и забыли...
Так в директории $TOOLKIT_DIR$\INC\ оказался С-шный stdlib.h.
В проекте директориями по умолчанию для поиска заголовочных файлов установлены (важен порядок):
$TOOLKIT_DIR$\INC\
$TOOLKIT_DIR$\INC\DLIB\
Т.е. компилятор смотрит в $TOOLKIT_DIR$\INC\ находит там stdlib.h и собирает проект. А линкер выдает ошибку из-за рассмотренных в этой ветке выше причин. smile.gif

Вот так вот, горе от ума... cranky.gif

Сообщение отредактировал tobias_ivan - Jun 22 2006, 10:21
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.02587 секунд с 7
ELECTRONIX ©2004-2016