首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MacOS10.16连接已安装的自制库

MacOS10.16连接已安装的自制库
EN

Stack Overflow用户
提问于 2020-07-03 07:43:31
回答 2查看 3.3K关注 0票数 1

我已经使用自制很长时间,从来没有面对这个奇怪的问题。出于某些原因,我不会在这里解释我使用的是MacOS 10.16 (Big ),这是最新MacOS的Beta版本,并且安装了使用自制的库。其中一个库是zlib。但是使用CMake构建,它就找不到库了。我试着构建wxWidgets和libcurl。两者都失败了,但都有类似的错误:

代码语言:javascript
复制
-- make[2]: *** No rule to make target `/usr/lib/libz.dylib', needed by `lib/libwx_baseu-3.1.dylib'.  Stop.
make[1]: *** [libs/base/CMakeFiles/wxbase.dir/all] Error 2
make: *** [all] Error 2

库搜索路径似乎不包括找到库的/usr/local/opt/zlib/lib。在另一台运行10.13 High的机器上,它工作得很好。

brew info zlib

代码语言:javascript
复制
zlib: stable 1.2.11 (bottled) [keg-only]
General-purpose lossless data-compression library
https://zlib.net/
/usr/local/Cellar/zlib/1.2.11 (12 files, 376.4KB)
  Poured from bottle on 2020-07-02 at 11:34:14
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/zlib.rb
==> Caveats
zlib is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

For compilers to find zlib you may need to set:
  export LDFLAGS="-L/usr/local/opt/zlib/lib"
  export CPPFLAGS="-I/usr/local/opt/zlib/include"

For pkg-config to find zlib you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig"

CMakeList.txt相关内容

代码语言:javascript
复制
cmake_minimum_required(VERSION 2.8.11)

# Project name
project(MyApp)

# This setting is useful for providing JSON file used by CodeLite for code completion
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)

set(CONFIGURATION_NAME "MacOSXDebug")

set(CL_WORKSPACE_DIRECTORY ..)
# Set default locations
set(CL_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/${CL_WORKSPACE_DIRECTORY}/cmake-build-${CONFIGURATION_NAME}/output)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CL_OUTPUT_DIRECTORY})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CL_OUTPUT_DIRECTORY})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CL_OUTPUT_DIRECTORY})

set(PROJECT_Studio_PATH "${CMAKE_CURRENT_LIST_DIR}")
set(WORKSPACE_PATH "${CMAKE_CURRENT_LIST_DIR}/..")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

#Build wxWidgets first
message("Building wxWidgets Libraries")
execute_process(COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/wxWidgets)
execute_process(COMMAND git submodule update --init 
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/../dependencies/wxWidgets
)
find_program(CMAKE_EXE cmake  HINTS "/usr/local/bin/")
message("CMake executable at: ${CMAKE_EXE}")
execute_process(
    COMMAND ${CMAKE_EXE} -DCMAKE_BUILD_TYPE=Debug -DwxUSE_EXPAT=builtin  -DwxBUILD_PRECOMP=OFF ${CMAKE_SOURCE_DIR}/../dependencies/wxWidgets -B ${CMAKE_CURRENT_BINARY_DIR}/wxWidgets
    ERROR_VARIABLE WX_BUILD_ERROR
    COMMAND_ECHO STDOUT
)
message(STATUS ${WX_BUILD_OUTPUT})
message(STATUS ${WX_BUILD_ERROR})

execute_process(
    COMMAND make -j4 #VERBOSE=1
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/wxWidgets
    ERROR_VARIABLE WX_BUILD_ERROR
    COMMAND_ECHO STDOUT
)
message(STATUS ${WX_BUILD_OUTPUT})
message(STATUS ${WX_BUILD_ERROR})

#Setup wxWidgets
set(ENV{PATH} "${CMAKE_CURRENT_BINARY_DIR}/wxWidgets:$ENV{PATH}")
set(WXWIN ${CMAKE_CURRENT_BINARY_DIR}/wxWidgets)

set(CMAKE_MACOSX_RPATH TRUE)
set(CMAKE_SKIP_BUILD_RPATH  FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_INSTALL_NAME_DIR "@rpath")

CMake日志

原木太大了,不能粘在这里。请看这里:https://pastebin.com/Mk4NrQgX

更新

所以我退房了,发生了一件奇怪的事。当我用ls列表时,我可以看到库的存在:

ls /usr/lib/|grep libz

代码语言:javascript
复制
libz.1.1.3.dylib
libz.1.2.11.dylib
libz.1.2.5.dylib

但是,例如,当我尝试用otool otool -L /usr/lib/libz.dylib检查库时

代码语言:javascript
复制
/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/objdump: error: '/usr/lib/libz.dylib': No such file or directory

我想问题就在这里,尽管我还没有破解密码。

更新2

所以运行ls -la /usr/lib | grep libz,正如您所看到的,它都是链接回libz.1.dylib,但是该文件不存在。

代码语言:javascript
复制
lrwxr-xr-x    1 root  wheel       12 Jan  1  2020 libz.1.1.3.dylib -> libz.1.dylib
lrwxr-xr-x    1 root  wheel       12 Jan  1  2020 libz.1.2.11.dylib -> libz.1.dylib
lrwxr-xr-x    1 root  wheel       12 Jan  1  2020 libz.1.2.5.dylib -> libz.1.dylib
lrwxr-xr-x    1 root  wheel       12 Jan  1  2020 libz.1.2.8.dylib -> libz.1.dylib
lrwxr-xr-x    1 root  wheel       12 Jan  1  2020 libz.dylib -> libz.1.dylib
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-04 21:18:26

/usr/lib/中的一些库似乎是纯粹的垃圾。我可以确认zliblibiconv已经损坏,链接到不存在的库。没有太多的抱怨,因为它是一个测试版。因此,解决方案是用brew install zlib安装brew版本,然后用

export PATH=/usr/local/opt/zlib/lib:/usr/local/opt/zlib/include:$PATH

票数 1
EN

Stack Overflow用户

发布于 2020-07-04 19:46:46

我们这里有一个大型史诗跟踪器,用于MacOS 10.16/11.0兼容性检查。https://github.com/Homebrew/brew/issues/7857

可以随意升级到那里的问题(实际上我看到zlib标记为)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62710754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档