Curl 本机客户端库链接

Curl 本机客户端库链接,curl,google-nativeclient,Curl,Google Nativeclient,我正在尝试将本机客户端(pNaCl)与来自naclports的curl库一起使用。我有NaCl SDK版本38,我正在使用naclports的pepper_38分支。在成功构建curl库之后,我在项目中包含了头文件,并使用pnacl工具链执行了“make”。如果只包含了标题,一切都很顺利,但只要我尝试使用库中的curl函数,我就会在该库中遇到大量“undefined reference”错误: /nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local

我正在尝试将本机客户端(pNaCl)与来自naclports的curl库一起使用。我有NaCl SDK版本38,我正在使用naclports的pepper_38分支。在成功构建curl库之后,我在项目中包含了头文件,并使用pnacl工具链执行了“make”。如果只包含了标题,一切都很顺利,但只要我尝试使用库中的curl函数,我就会在该库中遇到大量“undefined reference”错误:

/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'sigaction'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'recv'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'getsockname'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'bind'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'getsockopt'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'socket'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'connect'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'htons'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'getpeername'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'inet_pton'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'ntohs'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'inet_ntop'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'setsockopt'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'poll'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'send'
/nacl_sdk/pepper_38/toolchain/linux_pnacl/usr/local/lib/libcurl.a: error: undefined reference to 'inflate'

我对NaCl一无所知,所以任何提示都会非常有用。

看起来您的链接行中缺少了一些库。特别是,它们中的大多数似乎都是套接字调用。这些函数在nacl_io库中定义

在大多数工具链中,这些函数是在您的C库中定义的,因此您不必链接任何其他库。但是在NaCl中(使用newlib库时),有许多由NaCl_io添加的缺失函数

看起来您也需要充气,它来自zlib库。因此,您的新链接线应如下所示:

<other link args> -lcurl -lz -lnacl_io -lppapi
-lcurl-lz-lnacl\u io-lppapi

libppapi.a是必需的,因为nacl_io库使用它。

所以我最终设法编译了我的项目。最后,这取决于图书馆的链接顺序。工作顺序如下:ppapi_cpp ppapi pthread curl ssl crypto z nacl_io。前3个已在示例项目中,其他的已添加。

您好,谢谢您的回答。我已经有了zlib和ppapi,所以我添加了nacl_io,但是我得到了完全相同的错误输出。(还要注意的是,我昨天只发布了一小部分,因为输出太长了。基本上就像我在libcurl中的每个函数/对象上都得到了未定义的引用)。不确定这是否重要,但我使用的是SDK中getting_started文件夹中的“part 2”示例。我在Makefile中添加了curl,并尝试在代码中使用它。我在pepper_49上,使用google在pepper_49 bramcj libcurl上的webports构建了curl。a给了我
错误:对“报警”的引用未定义
,你知道吗?如果我还添加了
glibc compat
,那么问题就消失了,但是如果添加了该库,curl根本不起作用。