C:未定义的引用...到其他地方成功使用的库

时间:2012-01-18 08:28:47

标签: c compilation

我正在尝试使用外部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之外)并且它可以工作。

1 个答案:

答案 0 :(得分:2)

你说该库是用C语言编写的。然而,链接器能够打印出gauss_5()参数的类型这一事实表明它正在使用该函数的受限制的C ++名称。

我怀疑你的C标题可能会丢失extern "C" { ... }。{/ p>