The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Трабл (линковщик не находит функцию new), !*! Gerald, 09-Мрт-05, 20:41  [смотреть все]
При разработке проги использую функцию new. Компилятор ошибок не выдает, но вот линковщик ее не видит, выдает ошибки. Подскажите в чем трабл, может не подключил какую то библиотеку?
  • Трабл (линковщик не находит функцию new), !*! Arifolth, 10:02 , 10-Мрт-05 (1)
    >При разработке проги использую функцию new. Компилятор ошибок не выдает, но вот
    >линковщик ее не видит, выдает ошибки. Подскажите в чем трабл, может
    >не подключил какую то библиотеку?

    попробуй
    #include <new>

  • Трабл (линковщик не находит функцию new), !*! Xenu, 00:54 , 11-Мрт-05 (4)
    >При разработке проги использую функцию new. Компилятор ошибок не выдает, но вот
    >линковщик ее не видит, выдает ошибки. Подскажите в чем трабл, может
    >не подключил какую то библиотеку?

    ты бы, мил человек, показал бы, что ли кусочек кода на который ругается и  сообщение об ошибке, а то время доступа к волшебному кристаллу ограничено и не всегда возможно рассмотреть, что же ты имеешь ввиду когда задаешь вопрос.

    • Трабл (линковщик не находит функцию new), !*! Gerald, 12:03 , 12-Мрт-05 (5)
      Уважаемые коллеги... По Вашей просьбе предлагаю Вам "ругательный" кусок кода. Возникла интересная ситуация (для меня, конечно)... При использовании 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] Ошибка

      • Трабл (линковщик не находит функцию new), !*! gyn61, 12:31 , 12-Мрт-05 (6)
        Попробуйте
        extern "C" {
        #include <libipq.h>
        }
      • Трабл (линковщик не находит функцию new), !*! Xenu, 21:31 , 13-Мрт-05 (7)
        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.

        • Трабл (линковщик не находит функцию new), !*! Gerald, 19:56 , 14-Мрт-05 (8)
          Уважаемый Xenu!!! Огромное спасибо за подсказку, какую библиотеку подключать (я к этому времени уже начал догадываться в чем дело)...
          Я решил этот вопрос следующим образом. Взял исходник библиотеки libipq (там один файл libipq.c) изменил его название на libipq.cрр (тем самым компилирую в с++ формате) откомпилил вместе с проектом. Все прошло замечательно.... За помощь еще раз всем спасибо...


          • Трабл (линковщик не находит функцию new), !*! Xenu, 03:12 , 15-Мрт-05 (9)
            >Уважаемый Xenu!!! Огромное спасибо за подсказку, какую библиотеку подключать (я к этому
            >времени уже начал догадываться в чем дело)...
            Пожалуйста. Всегда приятно ответить на правильно заданый вопрос. :-)
            https://www.opennet.ru/opennews/art.shtml?num=1692


            >Я решил этот вопрос следующим образом. Взял исходник библиотеки libipq (там один
            >файл libipq.c) изменил его название на libipq.cрр (тем самым компилирую в
            >с++ формате) откомпилил вместе с проектом. Все прошло замечательно.... За помощь
            >еще раз всем спасибо...
            Тут мы видим мощь невообразимую и гибкость необычайную открытых исходников в действии.
            Взял, подправил под свои нужды и все работает.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру