При разработке проги использую функцию new. Компилятор ошибок не выдает, но вот линковщик ее не видит, выдает ошибки. Подскажите в чем трабл, может не подключил какую то библиотеку?
>При разработке проги использую функцию new. Компилятор ошибок не выдает, но вот
>линковщик ее не видит, выдает ошибки. Подскажите в чем трабл, может
>не подключил какую то библиотеку?попробуй
#include <new>
>>При разработке проги использую функцию new. Компилятор ошибок не выдает, но вот
>>линковщик ее не видит, выдает ошибки. Подскажите в чем трабл, может
>>не подключил какую то библиотеку?
>
>попробуй
>#include <new>эээ
и ещё
а компилятор какой?
плюсовый?
компилятор gcc
>При разработке проги использую функцию new. Компилятор ошибок не выдает, но вот
>линковщик ее не видит, выдает ошибки. Подскажите в чем трабл, может
>не подключил какую то библиотеку?ты бы, мил человек, показал бы, что ли кусочек кода на который ругается и сообщение об ошибке, а то время доступа к волшебному кристаллу ограничено и не всегда возможно рассмотреть, что же ты имеешь ввиду когда задаешь вопрос.
Уважаемые коллеги... По Вашей просьбе предлагаю Вам "ругательный" кусок кода. Возникла интересная ситуация (для меня, конечно)... При использовании gcc линковщик не находит функцию new, но "видит" функции ipq, а при использовании g++ "ругается" на то, что не находит функции ipq, но НЕ "ругается" на функцию new (см. результат выполнения ниже).#make
g++ -I/usr/local/include -L/usr/local/lib testipq.o ipn.o -o tf -lipq
testipq.o: In function `die(ipq_handle*)':
testipq.o(.text+0xf): undefined reference to `ipq_perror(char const*)'
testipq.o(.text+0x1d): undefined reference to `ipq_destroy_handle(ipq_handle*)'
testipq.o: In function `main':
testipq.o(.text+0x9f): undefined reference to `ipq_create_handle(unsigned)'
testipq.o(.text+0xd7): undefined reference to `ipq_set_mode(ipq_handle const*, unsigned char, unsigned)'
testipq.o(.text+0x10e): undefined reference to `ipq_read(ipq_handle const*, unsigned char*, unsigned, int)'
testipq.o(.text+0x13a): undefined reference to `ipq_message_type(unsigned char const*)'
testipq.o(.text+0x16c): undefined reference to `ipq_get_msgerr(unsigned char const*)'
testipq.o(.text+0x191): undefined reference to `ipq_get_packet(unsigned char const*)'
testipq.o(.text+0x1cf): undefined reference to `ipq_set_verdict(ipq_handle const*, unsigned, unsigned, unsigned, unsigned char*)'
collect2: ld returned 1 exit status
make: *** [res] Ошибка
Попробуйте
extern "C" {
#include <libipq.h>
}
gcc это не просто компилятор, это GNU Compiler Collection и его задача состоит в том, что бы определить тип файла, который был подан на обработку и вызвать соответствующий компилятор. Это может быть C, C++, Fortran и так далее, подробности на http://gcc.gnu.org/подробности как gcc определяет тип файла мне не известны, знаю, что один из критериев, расширение в имени файла (c, cpp, cc, C, cxx)
gcc вызывает с-компилятор если имя файла оканчивается на .c, а тот не знает про new потому, что new это оператор языка С++.
g++ вызывает с++ компилятор безусловно и тот находит new, но формирует c++ имена для всех функций, которые линковщик не может найти в libipq так как та собрана как c-библиотека.поэтому используйте extern "C", как уже было рекомендовано, если компилируете С++ и С вместе и вызываете g++ и добавьте -lstdc++ если вызываете gcc.
Уважаемый Xenu!!! Огромное спасибо за подсказку, какую библиотеку подключать (я к этому времени уже начал догадываться в чем дело)...
Я решил этот вопрос следующим образом. Взял исходник библиотеки libipq (там один файл libipq.c) изменил его название на libipq.cрр (тем самым компилирую в с++ формате) откомпилил вместе с проектом. Все прошло замечательно.... За помощь еще раз всем спасибо...
>Уважаемый Xenu!!! Огромное спасибо за подсказку, какую библиотеку подключать (я к этому
>времени уже начал догадываться в чем дело)...
Пожалуйста. Всегда приятно ответить на правильно заданый вопрос. :-)
http://www.opennet.me/opennews/art.shtml?num=1692
>Я решил этот вопрос следующим образом. Взял исходник библиотеки libipq (там один
>файл libipq.c) изменил его название на libipq.cрр (тем самым компилирую в
>с++ формате) откомпилил вместе с проектом. Все прошло замечательно.... За помощь
>еще раз всем спасибо...
Тут мы видим мощь невообразимую и гибкость необычайную открытых исходников в действии.
Взял, подправил под свои нужды и все работает.