我正在尝试使用外部C库编译C ++项目(openFrameworks + CodeBlocks)。我得到“未定义的引用”错误,虽然我成功地编译并在其他地方使用该库。
代码由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之外)并且它可以工作。
答案 0 :(得分:2)
你说该库是用C语言编写的。然而,链接器能够打印出gauss_5()
参数的类型这一事实表明它正在使用该函数的受限制的C ++名称。
我怀疑你的C标题可能会丢失extern "C" { ... }
。{/ p>