Я пытаюсь скомпилировать проект C++ (openFrameworks + CodeBlocks), используя внешнюю библиотеку C. Я получаю сообщение об ошибке «undefined reference», хотя я успешно компилирую и использую библиотеку в другом месте.C: undefined reference ... в библиотеку успешно используется в другом месте
Код состоит из источников main.cpp, testApp.cpp и файлов заголовков, в том числе для моей библиотеки «myprocessing». Когда я make
, код компилируется и умирает на увязку с ошибкой
obj/i686Release/./src/testApp.o: In function `testApp::update()':
testApp.cpp:(.text+0x261): undefined reference to `gauss_5(datarect_t)'
collect2: ld returned 1 exit status
make: *** [bin/faceGrabber] Error 1
где gauss_5
моя функция библиотеки, и она называется в testApp.cpp
(заголовок с декларациями включен там).
Ниже я вставить make
команды, используемые для компиляции кода, генерируемого CodeBlocks (я полоса его для ясности)
# compiling object for: ./src/testApp.cpp
g++ -c -g [some -I...] -DOF_USING_GTK -DOF_USING_MPG123 -Wall
-fexceptions -I. -Ilib/ -MMD -MP -MFobj/i686Debug/./src/testApp.d
-MTobj/i686Debug/./src/testApp.d -oobj/i686Debug/./src/testApp.o
-c ./src/testApp.cpp
# compiling object for: ./src/main.cpp
g++ -c -g -pthread [some -I...] -DOF_USING_GTK -DOF_USING_MPG123
-Wall -fexceptions -I. -Ilib/ -MMD -MP -MFobj/i686Debug/./src/main.d
-MTobj/i686Debug/./src/main.d -oobj/i686Debug/./src/main.o
-c ./src/main.cpp
# linking bin/faceGrabber_debug . ./src ./lib
g++ -o bin/faceGrabber_debug obj/i686Debug/./src/testApp.o
obj/i686Debug/./src/main.o -Wl,-rpath=./libs -Llib/ -lz
-lmyprocessing [some libs...]
Обратите внимание, что упоминается моя библиотека (-lmyprocessing
) в последнем, связывающей стадии. Итак, все заголовки и библиотеки найдены компилятором, но почему-то они не скомпилированы.
Я пробовал как .a
статические, так и .so
динамические файлы для моей обработки, безуспешно. Как я уже упоминал, я использую ту же библиотеку в другом проекте (вне openFrameworks и CodeBlocks), и он работает.
Используйте 'g ++ -v', чтобы понять, что на самом деле делает' g ++ '. –
Ваша структура каталогов поможет, это ваш файл .so в ./lib (относительно вашего Makefile)? – xpapad
Да, он есть. В противном случае линкер будет жаловаться, я полагаю. кроме того, это должен быть комментарий, а не ответ. –