链接.o (C对象文件)到Linux上的c++文件/项目
Link .o (C object file) to C++ file/project on Linux
我在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
相关文章:
- 找不到Linux Visual Studio代码C++文件
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 linux 可执行文件中使用静态库
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 无法在 Linux 上运行C++ ZMQ 项目的可执行文件
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- 在字符串中引用 Linux 用户名以打开文件
- Linux 源代码中普通磁盘文件的"轮询"功能在哪里实现?
- 如何在 Linux 中从 .so 文件打开可执行文件?
- 在 Linux 上没有 /proc/self/exe 的 C/C++ 运行时可执行文件的大小?
- 如何在 Linux 下使用 c++ 知道文件是否被其他进程使用?
- 如何用.so文件linux打包所有需要的库
- 在Linux Mint 19下,从哪里提取wxWidgets的源代码(.cpp文件)用于步骤内部调试
- 在 Linux 上,目标文件比在 macOS 或 Windows 上大 2.5 倍
- 不同的数学符号绑定与共享库与 dlopen 并直接链接到可执行文件 (Linux)
- SFML-无法加载映像-无法打开文件-LINUX
- 将文件的内容重定向为可执行文件linux的标准输入
- WMware 编译 cpp 文件 linux
- 将所有库依赖项包含到可执行文件Linux中