好的,所以这可能不是一个很好的问题,但我有点卡住了。
我有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库链接到我的项目/代码文件? 谢谢!
答案 0 :(得分:3)
哎哟。这么多的误会。您不需要先前编译的目标文件来将更多源文件编译为目标代码。但是,您需要在编译过程结束时将它们链接在一起,包括所需的任何库。总而言之:
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
非常好, read this.