使用 Catalina C++ 进行卷曲失败并获得 "Undefined symbols for architecture x86_64"
Curl with Catalina C++ failing and getting "Undefined symbols for architecture x86_64"
我正在尝试 运行 Catalina 10.15 的示例 c++ 程序:
#include </usr/local/opt/curl/include/curl/curl.h>
int main(void) {
CURL* curl;
CURLcode result;
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://www.wikipedia.org");
result = curl_easy_perform(curl);
curl_easy_cleanup(curl);
return 0;
}
我安装了 curl:
brew install curl
我不明白为什么这不起作用,我得到:
Scanning dependencies of target 2700
[ 50%] Building CXX object CMakeFiles/2700.dir/main.cpp.o
[100%] Linking CXX executable 2700
Undefined symbols for architecture x86_64:
"_curl_easy_cleanup", referenced from:
_main in main.cpp.o
"_curl_easy_init", referenced from:
_main in main.cpp.o
"_curl_easy_perform", referenced from:
_main in main.cpp.o
"_curl_easy_setopt", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [2700] Error 1
make[2]: *** [CMakeFiles/2700.dir/all] Error 2
make[1]: *** [CMakeFiles/2700.dir/rule] Error 2
make: *** [2700] Error 2
我的CMakeLists.txt如下:
cmake_minimum_required(VERSION 3.15.3)
project(2700)
include_directories(/usr/local/opt/curl/include/)
set(CMAKE_CXX_STANDARD 17)
add_executable(2700 main.cpp )
我正在使用 CLion,我对 C++ 还很陌生,尤其是在 MacOS 上。
我该怎么做才能使 curl 正常工作而不出现问题?
我意识到我需要在 CMakeLists.txt 中进行链接:
这个有效:
cmake_minimum_required(VERSION 3.15.3)
project(2700)
include_directories(/usr/local/opt/curl/include/)
set(CMAKE_CXX_STANDARD 17)
set(CURL_LIBRARY "-lcurl")
find_package(CURL REQUIRED)
add_executable(2700 main.cpp )
include_directories(${CURL_INCLUDE_DIR})
target_link_libraries(2700 ${CURL_LIBRARIES})
我在 MacOS Big Sur 上遇到了同样的错误……一模一样。为我解决的是这个答案:lib curl symbol not found
您只需link CURL: -lcurl
我也在使用 CLion,但不想为 CMakeLists.txt
文件操心。
通过编译命令添加标志对我来说要容易得多:
c++ main.cpp -o main -lcurl
我正在尝试 运行 Catalina 10.15 的示例 c++ 程序:
#include </usr/local/opt/curl/include/curl/curl.h>
int main(void) {
CURL* curl;
CURLcode result;
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://www.wikipedia.org");
result = curl_easy_perform(curl);
curl_easy_cleanup(curl);
return 0;
}
我安装了 curl:
brew install curl
我不明白为什么这不起作用,我得到:
Scanning dependencies of target 2700
[ 50%] Building CXX object CMakeFiles/2700.dir/main.cpp.o
[100%] Linking CXX executable 2700
Undefined symbols for architecture x86_64:
"_curl_easy_cleanup", referenced from:
_main in main.cpp.o
"_curl_easy_init", referenced from:
_main in main.cpp.o
"_curl_easy_perform", referenced from:
_main in main.cpp.o
"_curl_easy_setopt", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [2700] Error 1
make[2]: *** [CMakeFiles/2700.dir/all] Error 2
make[1]: *** [CMakeFiles/2700.dir/rule] Error 2
make: *** [2700] Error 2
我的CMakeLists.txt如下:
cmake_minimum_required(VERSION 3.15.3)
project(2700)
include_directories(/usr/local/opt/curl/include/)
set(CMAKE_CXX_STANDARD 17)
add_executable(2700 main.cpp )
我正在使用 CLion,我对 C++ 还很陌生,尤其是在 MacOS 上。
我该怎么做才能使 curl 正常工作而不出现问题?
我意识到我需要在 CMakeLists.txt 中进行链接:
这个有效:
cmake_minimum_required(VERSION 3.15.3)
project(2700)
include_directories(/usr/local/opt/curl/include/)
set(CMAKE_CXX_STANDARD 17)
set(CURL_LIBRARY "-lcurl")
find_package(CURL REQUIRED)
add_executable(2700 main.cpp )
include_directories(${CURL_INCLUDE_DIR})
target_link_libraries(2700 ${CURL_LIBRARIES})
我在 MacOS Big Sur 上遇到了同样的错误……一模一样。为我解决的是这个答案:lib curl symbol not found
您只需link CURL: -lcurl
我也在使用 CLion,但不想为 CMakeLists.txt
文件操心。
通过编译命令添加标志对我来说要容易得多:
c++ main.cpp -o main -lcurl