0

我在 c++ 代码下的 ubuntu 中工作。我正在使用 gsoap 来连接服务器。我已经获得了所有必要的数据。我也成功连接到服务器。我仍然有一个问题。为什么需要在命令行中写:g++ test_server.cpp -o testServ libgsoap++.a。如果我确实在我的文件夹中包含了所有依赖项,为什么我需要在命令行中包含 libgsoap++.a?编辑:

如果我不在命令行中包含 libgsoap++.a 我有:

undefined reference to `soap_embed'
/tmp/ccyeN0df.o: In function `soap_serialize_string(soap*, char* const*)':
TEST.cpp:(.text+0xb9de): undefined reference to `soap_reference'
/tmp/ccyeN0df.o: In function `soap_out_string(soap*, char const*, int, char* const*, char const*)':
TEST.cpp:(.text+0xba15): undefined reference to `soap_outstring'
/tmp/ccyeN0df.o: In function `soap_in_string(soap*, char const*, char**, char const*)':
4

1 回答 1

1

您需要告诉 g++ 您想使用 -lgsoap++ 链接到 libgsoap++。

如果要链接到非系统范围的 libgsopa++ 版本,则需要通过-L标志指定 g++ 的库路径。

简短说明:

您有链接时错误。编译成功并生成了目标文件。在编译期间,您“承诺”(通过包含 gsoap 包含文件)soap_serialize_string等存在于某处,并且目标代码可用。

现在链接器尝试从该目标文件生成可执行文件。它检查目标文件中的所有“承诺”并尝试解决它:用调用实际函数替换它。这个“实际功能”在哪里存在?在您的情况下,它是 libgsoap++.a。

因此,如果您不告诉链接器链接到 libgsoap++.a,则 Promise 仍然是 Promise,并且您有未定义的引用。

于 2011-09-07T12:51:10.540 回答