CMAKE_CXX_FLAGS 中的标记“-l”不起作用
Flag '-l' in CMAKE_CXX_FLAGS doesn't work
我在 mac machine 上写了一些代码,它一直运行良好,但是当我将它移植到 Linux machine 时,我得到一个 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 安装在此machine:
$ 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
从不 将 -l
标记添加到 CMAKE_EXE_LINKER_FLAGS 并且添加到 CMAKE_CXX_FLAGS(标志 -l
用于 linker,不适用于 编译器 ) .
对于 link 和库使用 target_link_libraries:它专门用于此目的:
target_link_libraries(<your-executable> curl)
当您向 *_FLAGS
变量添加一个标志时,该标志被添加 在源文件 (实际上是目标文件)之前 linker 的 command-line.如果源文件使用库中的某些函数,那么 linker 就找不到它。
相反,在linker的命令行中,在源文件之后添加了一个由命令target_link_libraries
产生的标志。
我在 mac machine 上写了一些代码,它一直运行良好,但是当我将它移植到 Linux machine 时,我得到一个 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 安装在此machine:
$ 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
从不 将 -l
标记添加到 CMAKE_EXE_LINKER_FLAGS 并且添加到 CMAKE_CXX_FLAGS(标志 -l
用于 linker,不适用于 编译器 ) .
对于 link 和库使用 target_link_libraries:它专门用于此目的:
target_link_libraries(<your-executable> curl)
当您向 *_FLAGS
变量添加一个标志时,该标志被添加 在源文件 (实际上是目标文件)之前 linker 的 command-line.如果源文件使用库中的某些函数,那么 linker 就找不到它。
相反,在linker的命令行中,在源文件之后添加了一个由命令target_link_libraries
产生的标志。