C++ libicuuc.so.52,需要libboost_regex-mt.so 介绍
我想编译一段使用ICU和libboost的代码。为此,我使用以下C++ libicuuc.so.52,需要libboost_regex-mt.so 介绍,c++,boost,cmake,icu,C++,Boost,Cmake,Icu,我想编译一段使用ICU和libboost的代码。为此,我使用以下install.sh文件。问题是我遇到了以下错误: /usr/bin/ld: warning: libicuuc.so.52, needed by /opt/boost-1.54.0/lib/libboost_regex.so, not found (try using -rpath or -rpath-link) 我知道我必须在cmakeLists.txt文件中添加一些内容: set(CMAKE_CXX_FLAGS "
install.sh
文件。问题是我遇到了以下错误:
/usr/bin/ld: warning: libicuuc.so.52, needed by /opt/boost-1.54.0/lib/libboost_regex.so, not found (try using -rpath or -rpath-link)
我知道我必须在cmakeLists.txt文件中添加一些内容:
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS} -rpath=/opt/icu_52.1/")
但它不起作用:
c++: error: unrecognized command line option ‘-rpath=/opt/icu_52.1/’
当我尝试时:set(CMAKE\u CXX\u FLAGS“-std=c++11${CMAKE\u CXX\u FLAGS}-Wl,-rpath=/opt/icu\u 52.1/”
错误:/usr/bin/ld:warning:libicuuc.so.52,未找到/opt/boost-1.54.0/lib/libboost_regex-mt.so所需的文件(请尝试使用-rpath或-rpath链接)
Install.sh
CmakeLists.txt
添加到CMakeLists.txt文件:
link_directories(/opt/icu_52.1/lib)
您还可以尝试查看是否有人为ICU编写了查找包,无论如何,它不属于标准的cmake模块。@Antonio我确信我必须在那里添加一些内容。但是我忘记了正确的命令:
set(CMAKE\u CXX\u FLAGS)-std=c++11${CMAKE\u CXX\u FLAGS}-Wl,-rpath=/opt/icu\u 52.1/”
(注意附加的-Wl,
),在cmake中,您可以通过使用命令link\u directories
添加目录来做到这一点:libicuuc.so.52似乎不在您的Boost\u LIBRARY\u DIRS`路径中。首先,查找您是否有libicuuc.so.52
,以及它在/opt/icu\u 52.1/lib中的位置。因此,我必须添加/opt/icu_52.1/lib@Antonios与-Wl,-rpath=/opt/icu_52.1/“?@HaniGoc相同。最好不要将添加正确标志的工作留给cmake。不应将rpath
标志与cmake命令混合使用。
project(Entlk)
cmake_minimum_required(VERSION 2.6)------------------------------------------------------------------------------
# Support C++11
# ------------------------------------------------------------------------------
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG(-std=c++11 HAVE_STDCPP11)
if (HAVE_STDCPP11)
message("-- C++11 supported")
add_definitions(-DHAVE_STDCPP11) # to be used in the cpp code
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS} -lboost_regex")
else (HAVE_STDCPP11)
message("-- C++11 NOT supported")
set(CMAKE_CXX_FLAGS "-DNO_STDCPP11 ${CMAKE_CXX_FLAGS}")
endif (HAVE_STDCPP11)
# warnings
# disable warnings on unknown pragmas (used by sqlite_modern)
set(CMAKE_CXX_FLAGS "-W -Wall -Wno-unknown-pragmas ${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "-fPIC ${CMAKE_CXX_FLAGS}")
#use Stanford NER instead of MITIE
#set(CMAKE_CXX_FLAGS "-DUSE_STANFORD_NER ${CMAKE_CXX_FLAGS}")
# display install directory
message(STATUS "Install directory is CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
# ------------------------------------------------------------------------------
# configure third party librairies
# ------------------------------------------------------------------------------
include(cmake/EntlkUtils.cmake)
# Path to look for FindXXX.cmake files
set(CMAKE_MODULE_PATH
"${CMAKE_SOURCE_DIR}/cmake" # available in this project
)
find_package(ICU 4.4 REQUIRED)
include_directories(${ICU_INCLUDE_DIRS})
# include Qt (for lima)
include(${CMAKE_SOURCE_DIR}/cmake/manageQt5.cmake)
addQt5Modules(Core Xml)
include_directories(${Qt5_INCLUDES})
set(QT_LIBRARIES "${Qt5_LIBRARIES}")
find_package(Boost 1.46 REQUIRED COMPONENTS regex serialization system filesystem program_options timer log)
include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIRS})
# add define needed by Boost Log
set(CMAKE_CXX_FLAGS "-DBOOST_LOG_DYN_LINK ${CMAKE_CXX_FLAGS}")
#message(STATUS "using Boost libraries ${Boost_LIBRARIES}")
link_directories(/opt/icu_52.1/lib)