本机客户端卷曲库链接

时间:2015-03-19 14:44:14

标签: curl google-nativeclient

我尝试将本机客户端(pNaCl)与来自naclports的curl库一起使用。我有NaCl SDK版本38,我使用naclports的pepper_38分支。在成功构建curl库之后,我在项目中包含了标题并执行了#34; make"使用pnacl工具链。如果只包含标题一切顺利,但是一旦我尝试使用库中的curl函数,我就会得到大量未定义的引用"该库中的错误:

/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很新,所以任何提示都会非常有用。

2 个答案:

答案 0 :(得分:3)

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

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

看起来你也需要膨胀,它来自zlib库。所以你的新链接应该是这样的:

<other link args> -lcurl -lz -lnacl_io -lppapi

需要libppapi.a,因为nacl_io库使用它。

答案 1 :(得分:0)

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