C++ Can';MacOSX上的t-link静态库

C++ Can';MacOSX上的t-link静态库,c++,macos,cmake,static-libraries,C++,Macos,Cmake,Static Libraries,我无法将静态库链接到Mac OS X上的可执行文件。 我的repo目录lib包含所有库,如libstdc++.a,libssl.a,libz.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_l

我无法将静态库链接到Mac OS X上的可执行文件。 我的repo目录
lib
包含所有库,如
libstdc++.a
libssl.a
libz.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
文件):

以及:

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

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和mac os上编译时,我可以链接相同的
.a
文件吗?

您是否尝试使用为linux构建的库?那不行,你需要为macOS构建库

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

提取的对象文件真的是MacOS对象文件吗?似乎您正在尝试使用Linux对象文件构建MacOS库(这显然是错误的)。提取的对象文件真的是MacOS对象文件吗?您似乎正在尝试使用Linux对象文件构建MacOS库(这显然是错误的)。在MacOS上编译的程序是否可以在Linux上使用MacOS库?不可以。您需要MacOS上的MacOS库,也需要Linux上的Linux库。请告诉我一件事。我可以在macOS上用Linux库编译一个程序以在Linux上运行吗?不能用标准编译器和工具链。你可以安装一个交叉编译器和工具链,但设置一个运行Linux的虚拟机并使用它为Linux构建可能会更容易。在macOS上编译的工作程序,在Linux上有macOS库吗?没有。你需要macOS上的macOS库,你需要Linux上的Linux库。请告诉我一件事。我可以在macOS上用Linux库编译一个程序以在Linux上运行吗?不能用标准编译器和工具链。您可以安装交叉编译器和工具链,但设置运行Linux的虚拟机并使用它为Linux构建可能更容易。
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