Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 未定义对函数的引用,链接器错误_C_Compiler Errors_Compilation_Linker_Linker Errors - Fatal编程技术网

C 未定义对函数的引用,链接器错误

C 未定义对函数的引用,链接器错误,c,compiler-errors,compilation,linker,linker-errors,C,Compiler Errors,Compilation,Linker,Linker Errors,这是一个新手问题,我可能做了一些愚蠢的事情,但我编写了一个C程序,其中包括两个非默认库:curl和libxml2。我试图详细了解编译过程,以了解编译过程并静态链接库。以下是我采取的步骤: 下载libxml2和curl,并使用附带的makefile进行编译,并执行以下操作: ar rcs libcurl.a /home/${USER}/Desktop/Curl/curl-7.73.0/lib/*.o ar rcs libxml2.a /home/${USER}/Desktop/xml2/lib

这是一个新手问题,我可能做了一些愚蠢的事情,但我编写了一个C程序,其中包括两个非默认库:curl和libxml2。我试图详细了解编译过程,以了解编译过程并静态链接库。以下是我采取的步骤:

下载libxml2和curl,并使用附带的makefile进行编译,并执行以下操作:

ar rcs libcurl.a  /home/${USER}/Desktop/Curl/curl-7.73.0/lib/*.o 
ar rcs libxml2.a /home/${USER}/Desktop/xml2/libxml2-2.7.2/*.o
即使我只使用了这些库中的一些函数,我还是将它们打包在一起,以防它们相互需要,或者至少我认为这就是它的工作原理。我将生成的arhive库复制到一个单独的位置,最后我执行了以下操作:

cp ~/Desktop/libxml2-2.7.2/libxml2.a ~/Desktop/libs/
cp ~/Desktop/Curl/curl-7.73.0/lib/libxml2.a ~/Desktop/libs/
gcc WolframParser.c -I/home/${USER}/Desktop/Curl/curl-7.73.0/include/ -I/home/${USER}/Desktop/libxml2-2.7.2/include/ -L/home/${USER}/Desktop/libs/ -lcurl -lxml2 -lm
链接器报告一系列未定义引用的错误,如:

    /usr/bin/ld: /home/${USER}/Desktop/libs//libcurl.a(libcurl_la-multi.o): in function `multi_getsock':
multi.c:(.text+0x18e): undefined reference to `Curl_ssl_getsock'
/usr/bin/ld: /home/${USER}/Desktop/libs//libcurl.a(libcurl_la-easy.o): in function `curl_global_init':
easy.c:(.text+0x172): undefined reference to `Curl_ssl_init'
/usr/bin/ld: /home/${USER}/Desktop/libs//libcurl.a(libcurl_la-easy.o): in function `curl_global_init_mem':
easy.c:(.text+0x22e): undefined reference to `Curl_ssl_init'
/usr/bin/ld: /home/${USER}/Desktop/libs//libcurl.a(libcurl_la-easy.o): in function `curl_global_cleanup':
easy.c:(.text+0x295): undefined reference to `Curl_ssl_cleanup'
. . .

有人能指出我做错了什么吗?能不能这样做?

对不起,我自己没有时间做这件事,所以这里只是一些想法。--1.请确保丢失的函数实际上已在库中编译和存档。-2.请查阅GCC的文档,了解如何链接库。特别是每个库都会被反复扫描,直到没有参考资料可以解决。对不起,我自己没有时间做这件事,所以这里只是一些想法。-1.请确保丢失的函数实际上已在库中编译和存档。-2.请查阅GCC的文档,了解如何链接库。尤其是重复扫描每个库,直到无法解析任何引用。