C++多级链接

C++ multi-stage linking

本文关键字:链接 多级 C++      更新时间:2023-10-16

好的,所以这可能不是一个好问题,但我有点卡住了。

我有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

漂亮,阅读本文。