CMAKE_CXX_FLAGS中的标记'-l'不起作用

时间:2018-02-24 23:17:37

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

我在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 

1 个答案:

答案 0 :(得分:4)

从不-l标记添加到 CMAKE_EXE_LINKER_FLAGS ,而且还添加到 CMAKE_CXX_FLAGS (标记-l用于< em> linker ,而不是编译器)。

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

target_link_libraries(<your-executable> curl)

*_FLAGS变量添加标志时,标志会在链接器命令行中的源文件(实际上是对象文件)之前添加。如果源文件使用库中的某些函数,则链接器无法找到它。

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