Не удается связать статическую библиотеку в Mac OS X - PullRequest
0 голосов
/ 05 мая 2018

Я не могу связать статические библиотеки с исполняемым файлом в Mac OS X. У меня в каталоге репо 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 файла):

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 раньше, и там у меня не было никаких проблем.
Я пытался извлечь все файлы .o из .a и снова создать файл архива, используя

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

И вот мой вопрос, может быть, стоит начать с него, можно ли связать одни и те же .a файлы при компиляции на linux и mac os?

1 Ответ

0 голосов
/ 05 мая 2018

Вы пытаетесь использовать библиотеки, созданные для Linux? Это не сработает, вам нужны библиотеки, созданные для macOS.

...