链接.o (C对象文件)到Linux上的c++文件/项目

Link .o (C object file) to C++ file/project on Linux

本文关键字:文件 Linux 上的 c++ 项目 对象 链接      更新时间:2023-10-16

我在linux中有一个问题。o文件如下:

我有Visual.cpp调用函数ECL_Drawrect(),这个函数被定义为:

#define ECL_Drawrect ECL_bDrawrect

在我的Visual.cpp中,我还包括"ecl.h"作为:

#include "ecl.h"
int main() {
    ECL_Drawrect (0,0,20,20,false);
    return 0;
}

问题是函数ECL_bDrawrect在ecl中。o文件,我不知道如何链接它来使用上面提到的函数。

经过一番研究,我发现并设置如下:

g++ Visual.cpp -o Visual /usr/include/ecl.o

ecl。0路径也包括在我的项目,当我编译我得到这个错误:

**** Build of configuration Debug for project Visual ****
make all 
Building file: ../src/Visual.cpp
Invoking: GCC C++ Compiler
g++ -m32 -O0 -g3 -Wall -c -fmessage-length=0 /usr/include/ecl.o -MMD -MP -MF"src/Visual.d" -MT"src/Visual.d" -o "src/Visual.o" "../src/Visual.cpp"
g++: /usr/include/ecl.o: linker input file unused because linking not done
Finished building: ../src/Visual.cpp
Building target: Visual
Invoking: GCC C++ Linker
g++ -m32  -o "Visual"  ./src/Visual.o   
/usr/bin/ld: ./src/Visual.o: in function main:../src/Visual.cpp:7: error: undefined reference to 'ECL_bDrawrect'
collect2: ld returned 1 exit status
make: *** [Visual] Error 1
**** Build Finished ****

我不知道链接是否正确?我怎样才能把这个联系起来呢?以正确的方式归档?

p/S:我正在使用eclipse CDT在ubuntu 11.04 64位和ecl。是32位的,这就是为什么我必须在g++中加上-m32。

O文件未列在链接器命令行上。

此外,您可能需要在include周围使用extern "C":

extern "C" {
#include "ecl.h"
}

是否可能的问题是c++名称混淆?也许将你的函数声明为extern "C"就可以了。

#ifdef __cplusplus 
extern "C" {
#endif
/* ... */
#ifdef __cplusplus
}
#endif