macOS下CLion运行C程序时动态链接器无法找到libdivsufsort64库
动态链接器报错:Symbol not found: _divsufsort64(CLion运行失败但命令行正常)
环境信息
- macOS Sonoma 14.2
- 编译器:Apple clang 15.0.0
- CMake版本:3.28.0
- GNU Make:3.81
- IDE:CLion 2023.3
问题现象
构建过程无链接错误,但CLion启动程序时动态链接器报错:
dyld[8397]: Symbol not found: _divsufsort64
Referenced from: <12C04522-55DC-3F19-8288-E875505D9BCE> /Users//Documents/projects/problems_linker/cmake-build-debug/problems_linker
Expected in:unknown
但命令行构建运行完全正常,执行命令如下:
mkdir build cd build cmake .. make ./problems_linker
复现代码(文件同目录)
CMakeLists.txt
cmake_minimum_required(VERSION 3.27) project(problems_linker C) set(CMAKE_C_STANDARD 11) set(SOURCES main.c ) set(INCLUDES ${CMAKE_CURRENT_BINARY_DIR} /usr/local/include /usr/local/lib ) add_executable(problems_linker main.c) target_include_directories(${PROJECT_NAME} PRIVATE ${INCLUDES}) find_package(ZLIB) target_link_libraries(${PROJECT_NAME} PRIVATE ZLIB::ZLIB) target_link_libraries(${PROJECT_NAME} PRIVATE /usr/local/lib/libdivsufsort64.dylib)
main.c
#include <stdio.h> #include <divsufsort64.h> #include <zlib.h> #include <stdlib.h> int main() { printf("Hello, World!\n"); gzFile gz; const uint8_t bs[] = {2, 3, 1, 0}; long long n = 4; int64_t* sa = malloc(n * sizeof(*sa)); if(divsufsort64(bs, sa, n) < 0) { } printf("Works\n"); return 0; }
依赖安装方式
通过brew安装:
- divsufsort:
brew tap brewsci/bio brew install Formula/libdivsufsort
- zlib:
brew install zlib
已尝试的解决方法
- 设置
DYLD_FALLBACK_LIBRARY_PATH环境变量 - 改用
find_library方式链接divsufsort(修改后的CMake如下,但命令行构建提示DIVSUFSORT变量不存在,且CLion运行仍报错)
修改后的CMakeLists.txt
cmake_minimum_required(VERSION 3.27) project(problems_linker C) set(CMAKE_C_STANDARD 11) set(SOURCES main.c ) set(INCLUDES ${CMAKE_CURRENT_BINARY_DIR} /usr/local/include /usr/local/lib ) SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) SET(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX}) add_executable(problems_linker main.c) target_include_directories(${PROJECT_NAME} PRIVATE ${INCLUDES}) find_package(ZLIB) find_library(DIVSUFSORT libdivsufsort64 PATHS /usr/local/lib/) target_link_libraries(${PROJECT_NAME} PRIVATE ZLIB::ZLIB) target_link_libraries(${PROJECT_NAME} PRIVATE ${DIVSUFSORT})
关键说明
链接器能正确找到库路径,仅动态链接器在CLion运行时报错。旧项目也存在相同现象:命令行正常,CLion运行报错。
请求提供解决思路和帮助。
内容的提问来源于stack exchange,提问作者ead
相关产品推荐
相关产品推荐

