【问题标题】:native client curl library linking本机客户端 curl 库链接
【发布时间】:2015-03-19 14:44:14
【问题描述】:

我正在尝试将本机客户端 (pNaCl) 与来自 naclports 的 curl 库一起使用。我有 NaCl SDK 版本 38,我正在使用 naclports 的 pepper_38 分支。成功构建 curl 库后,我将头文件包含在项目中并使用 pnacl 工具链执行“make”。如果只包含标题一切顺利,但是一旦我尝试使用库中的 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 完全陌生,所以任何提示都会非常有帮助。

【问题讨论】:

    标签: curl google-nativeclient


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 您好,感谢您的回答。我已经有了 zlib 和 ppapi,所以我添加了 nacl_io,但我得到了完全相同的错误输出。 (还要注意我昨天只发布了一小部分,因为输出太长了。基本上就像我在 libcurl 中的每个函数/对象上都获得了未定义的引用)。不确定这是否重要,但我使用的是 SDK 中 getting_started 文件夹中的“第 2 部分”示例。我将 curl 添加到 Makefile 并尝试在代码中使用它。
    【解决方案2】:

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

    【讨论】:

    • 我在pepper_49上,并在pepper_49 bramcj上使用谷歌的网络端口构建了curl,libcurl.a给了我error: undefined reference to 'alarm',你知道吗?如果我还添加glibc-compat,问题就会消失,但如果添加该库,curl 就根本不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 2013-11-20
    • 2021-05-21
    相关资源
    最近更新 更多