我尝试将本机客户端(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很新,所以任何提示都会非常有用。
答案 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个已经在示例项目中,其他的已经添加。