C++多级链接
C++ multi-stage linking
好的,所以这可能不是一个好问题,但我有点卡住了。
我有3个程序:
pegio.c/pegio.h-为我的设备进行硬件初始化和功能
PegIOHandler.cpp/PegIOHandler.h-处理设备的I/O
PegRTU.cpp-主要功能
我的项目实现了opendnp3(允许使用DNP3协议传输数据)库。现在,为了编译它,我首先编译pegio.c文件
gcc -c pegio.c -o pegio.o
简单,到这里我明白了。
其次,我编译了IOHandler并在它使用时引用pegio.c。
g++ -c PegIOHandler.cpp pegio.c -o PegIOHandler.o -std=c++0x
现在它给出了以下输出。
g++:警告:pegio.o:链接器输入文件未使用,因为链接未完成
但是,它仍然会创建对象文件。但是,PegIOHandler实现了opendnp3头文件,它包含在PegIOHandler.cpp和PegIOHandler.h中。当我尝试在不使用"-c"的情况下编译这些文件时,它会"告诉"我存在对opendnp3文件的未定义引用。我知道我必须把它们和我的项目联系起来,但我该怎么做呢?
然后编译我的第三个也是最后一个文件:
g++ PegRTU.cpp pegio.o PegIOHandler.o -o pegrtu -std=c++0x
现在,这告诉我存在对opendnp3文件的未定义引用。那么:如何将opendnp3库链接到我的项目/代码文件???谢谢
哎哟。误解太多了。您不需要以前编译的对象文件来将进一步的源文件编译为对象代码。但是,您确实需要在编译过程结束时将它们链接在一起,包括所需的任何库。总而言之:
gcc -c pegio.c -o pegio.o
g++ -c PegIOHandler.cpp -o PegIOHandler.o -std=c++0x
g++ -c PegRTU.cpp -o PegRTU.o -std=c++0x
g++ -o executable_name *.o -lopendnp3 # or whatever linker flag is needed for OpenDNP3
请漂亮,阅读本文。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 下面是我为检测链接列表中的循环而制作的代码
- 有了gcc,是否可以链接库,但前提是它存在
- 使用C链接在函数内部创建C++模板
- Visual Studio mkl_link_tool.exe链接错误
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- C++多级链接