不能 link Mac OS 上的静态库 X

Can't link static library on Mac OS X

我不能 link 静态库到 Mac OS X 上的可执行文件。 我的回购目录 lib 包含所有库,例如 libstdc++.alibssl.alibz.a.

CMakeList.txt 包含:

(...)
set(PROJECT_LINK_LIBS libcurl.a libz.a libssl.a libcrypto.a libstdc++.a libjson-c.a)
link_directories(lib/)
add_executable(myapp ${SOURCES})
target_link_libraries(myapp ${PROJECT_LINK_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS})

编译时我收到一条消息(针对每个 .a 文件):

ld: warning: ignoring file /Users/kuba/CLionProjects/RigService/lib/macos/libz.a, file was built for archive which is not the architecture being linked (x86_64)

和:

Undefined symbols for architecture x86_64:
    "_curl_easy_cleanup", referenced from:
        HTTPConnection::request(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const*) in HTTPConnection.cpp.o
    "_curl_easy_init", referenced from:
        HTTPConnection::request(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const*) in HTTPConnection.cpp.o
    "_curl_easy_perform", referenced from:
        HTTPConnection::request(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, char const*) in HTTPConnection.cpp.o
(...)

我之前在 linux 上编译过,没有遇到任何问题。
我试图从 .a 中提取所有 .o 文件,然后再次使用

构建一个存档文件
ar rcs libcurl.a *.o

但之后我遇到了同样的问题。
我还试图通过

建立一个档案
libtool -static -o libcurl.a *.o

但后来我收到一条消息:

sal:libcrypto kuba$ libtool -static -o libcrypto.a *.o
error: /Library/Developer/CommandLineTools/usr/bin/libtool: file: a_bitstr.o is not an object file (not allowed in a library)
error: /Library/Developer/CommandLineTools/usr/bin/libtool: file: a_bool.o is not an object file (not allowed in a library)
error: /Library/Developer/CommandLineTools/usr/bin/libtool: file: a_bytes.o is not an object file (not allowed in a library)
(...) // error for each .o file

这是我的问题,也许我应该从它开始,我可以在 linux 和 [=53] 上编译时 link 相同的 .a 文件吗=] os?

您是否正在尝试使用为 Linux 构建的库?那行不通,您需要为 macOS 构建的库。