-1

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

我有 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 库链接到我的项目/代码文件?谢谢!

4

1 回答 1

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

非常拜托,这个。

于 2013-06-28T08:06:12.683 回答