如何使用CMake部署ICU库
How do I deploy the ICU libraries using CMake?
我正在尝试构建一个使用ICU的linux应用程序。虽然ICU库在大多数linux发行版上都是可用的,但我最近了解到它在不同版本之间通常是不兼容的。我认为最简单的方法是使用我的应用程序部署ICU,以便在安装时满足所有依赖关系。
我的问题是,如何使用CMake做到这一点?我尝试了以下方法:
find_library(ICUIL18N_LIB icui18n )
find_library(ICUUC_LIB icuuc)
find_library(ICUDATA_LIB icudata)
#link pthread and ICU against the library
target_link_libraries(MyApp pthread rt ${ICUIL18N_LIB} ${ICUUC_LIB})
install(FILES ${ICUIL18N_LIB} ${ICUUC_LIB} ${ICUDATA_LIB}
DESTINATION lib)
这似乎是可行的,但是当我检查我生成的包时,我的应用程序最终会期望这些库:
libicui18n.so.50 => /lib/libicui18n.so.50 (0xf74ee000)
libicuuc.so.50 => /lib/libicuuc.so.50 (0xf737b000)
但我的包中包含的文件只是名称不匹配的符号链接:
/lib/libicui18n.so -> libicui18n.so.50.1.2
/lib/libicuuc.so -> libicuuc.so.50.1.2
/lib/libicudata.so -> libicudata.so.50.1.2
有没有一种方法可以让我通过cmake从目标获得实际的完全链接路径,这样我就可以安装正确的文件?
我应该使用不同的机制吗?我确实看到了"BundleUtilities"插件,但说明不清楚,我不确定它是否适用于这种情况。
我最终直接"找到"了ICU符号链接和实际的库文件,然后安装了它们。不是很优雅,但符合我的目的。不幸的是,每当我更改ICU版本时,这将需要修改。
set(ICU_MAJOR_VER "57")
set(ICU_FULL_VERSION "${ICU_MAJOR_VER}.1")
find_library(ICUIL18N_LIB libicui18n.so.${ICU_FULL_VERSION} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH)
find_library(ICUUC_LIB libicuuc.so.${ICU_FULL_VERSION} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH)
find_library(ICUDATA_LIB libicudata.so.${ICU_FULL_VERSION} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH)
find_library(ICUIL18N_MAJOR_LIB libicui18n.so.${ICU_MAJOR_VER} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH)
find_library(ICUUC_MAJOR_LIB libicuuc.so.${ICU_MAJOR_VER} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH)
find_library(ICUDATA_MAJOR_LIB libicudata.so.${ICU_MAJOR_VER} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH)
install(FILES ${ICUIL18N_LIB} ${ICUUC_LIB} ${ICUDATA_LIB}
${ICUIL18N_MAJOR_LIB} ${ICUUC_MAJOR_LIB} ${ICUDATA_MAJOR_LIB}
DESTINATION lib)
相关文章:
- 使用调试/崩溃报告将应用程序部署到客户端
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- 如何在 Linux for Windows 上通过 MinGW 构建静态 ICU 的 Boost
- Qt QML相机在部署后显示白屏
- WinDeployqt 不会为调试应用程序部署 Qwindowsd.dll
- 在 Linux 上部署 Qt 应用程序
- 检测 ICU 库在 VS2017 中失败
- 如何调整ICU的UnicodeString::caseCompare(或获得相同的效果)
- 如何使用所有依赖项部署C++项目?
- 更改用于部署的凭据提供程序 GUID 的过程
- 由于____chkstk_darwin,在Catalina上使用部署10.10编译的MacOS应用程序在HighSierra版本<崩溃
- Qt5 部署"procedure entry point could not be located"
- 用 Python 训练神经网络并在 C++ 中部署
- 部署在张量流中训练的神经网络来火炬C++的最佳方法是什么?
- 部署基于 qt 的项目后,我的 sqlite3 文件不会被复制 (android)
- Qt-png图像未显示在部署应用程序中
- 从Windows 10编译VS2017在Windows 7和…上部署..找不到DLL
- 在将 cmake 项目与 Qt5 链接时部署 icu 库
- 如何使用CMake部署ICU库
- 部署一个没有ICU依赖的Qt项目