【问题标题】:Flag '-l' in CMAKE_CXX_FLAGS doesn't workCMAKE_CXX_FLAGS 中的标志“-l”不起作用
【发布时间】:2018-08-04 17:41:07
【问题描述】:

我在我的 mac 机器上编写了一些代码,它一直运行良好,但是当我将它移植到 Linux 机器上时,我得到一个 undefined reference to curl_easy_init

我的编译器标志包括一个用于链接的-lcurl

这是我的链接方式:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -L/curl/lib/dir -lcurl")

我尝试过使用和不使用-L/curl/lib/dir

Curl 安装在这台机器上:

$ curl --version
curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 

【问题讨论】:

  • 嗨!这是您的 libcurl* 库所在的 /curl/lib/dir 吗?你是用系统curl还是自己编译的?
  • 我不认为那是他们所在的地方。运行curl-config --libs 它返回-L/usr/lib/x86_64-linux-gnu -lcurl。我虽然这将是实际的标志,但即使有这个,同样的错误。
  • 所以 -lcurl 应该足够了。 cat /etc/ld.so.conf.d/x86_64-linux-gnu.conf 说什么?
  • 命令给出了这个。此外,-lcurl 足以在我的 Mac 上工作。 # Multiarch support /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu

标签: c++ linux curl cmake shared-libraries


【解决方案1】:

从不-l标志添加到CMAKE_EXE_LINKER_FLAGS以及CMAKE_CXX_FLAGS(标志-l用于链接器,不适用于编译器)。

对于与库的链接,请使用target_link_libraries:它专门用于此目的:

target_link_libraries(<your-executable> curl)

当您将标志添加到*_FLAGS 变量时,该标志将被添加到链接器命令行中的源文件(实际上是目标文件)之前。如果源文件使用库中的某些函数,则链接器找不到它。

相反,由命令target_link_libraries 生成的标志被添加在链接器命令行中的源文件之后

【讨论】:

    猜你喜欢
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    相关资源
    最近更新 更多