我正在使用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*)':
最佳答案
您需要告诉g ++您要使用-lgsoap ++链接到libgsoap ++。
如果要链接到libgsopa ++的非系统范围版本,则需要通过-L
标志指定g ++的库路径。
简短说明:
您有链接时间错误。编译成功并生成了目标文件。在编译期间,您“承诺”(通过包含gsoap包含文件)soap_serialize_string
等存在于某处,并且目标代码可用。
现在,链接器尝试从该目标文件制作可执行文件。它检查目标文件中的所有“承诺”并尝试解决:将其替换为调用实际功能。这种“实际功能”在哪里存在?就您而言,它是libgsoap ++。a。
因此,如果不告诉链接器链接到libgsoap ++。a,则promise仍然是promise,并且您有未定义的引用。