2

我试图在构建时将 jemalloc 库链接到我的应用程序中,并将其用作通用实现。根据https://github.com/jemalloc/jemalloc/wiki/Getting-Started使用的链接标志是:

-L`jemalloc-config --libdir` -Wl,-rpath,`jemalloc-config --libdir` -ljemalloc `jemalloc-config --libs`

所以我做了以下CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12.2)
project(widget)
include_directories(include)
file(GLOB SOURCES "src/*.cpp")
add_executable(widget ${SOURCES})
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L`jemalloc-config --libdir` -Wl,-rpath,`jemalloc-config --libdir` -ljemalloc `jemalloc-config --libs`")

但是当我这样做时make,会出现以下错误

Linking CXX executable widget
c++: error: `jemalloc-config: No such file or directory
c++: error: unrecognized command line option ‘--libdir`’
c++: error: unrecognized command line option ‘--libdir`’
c++: error: unrecognized command line option ‘--libs`’
make[2]: *** [widget] Error 1
make[1]: *** [CMakeFiles/widget.dir/all] Error 2
4

3 回答 3

1

对于后代,因为这仍然是 Google 上的第一个链接之一。

Jemalloc 带有 pkg​​-config 设置,可以这样使用:

find_package(PkgConfig REQUIRED)
pkg_check_modules (JEMALLOC jemalloc)

pkg_search_module(JEMALLOC REQUIRED jemalloc)
include_directories(${JEMALLOC_INCLUDE_DIRS})

target_link_libraries(your_target_name ${JEMALLOC_LIBRARIES})
于 2020-08-08T20:42:53.550 回答
0

execute_process()命令是你的朋友。使用它来运行jemalloc-config可执行文件,然后将其输出放入 CMake 变量中。

于 2017-09-22T15:47:14.857 回答
0
  1. 找到jemalloc的root_dir。我的是 /Users/lion/homebrew/Cellar/jemalloc/5.2.1_1/lib/ (我jemallocbrewmacOS 上安装)
  2. 将其所有库链接(软链接)到您的本地库ln -s /Users/lion/homebrew/Cellar/jemalloc/5.2.1_1/lib/* /usr/local/lib

然后它起作用了!

于 2022-01-23T08:13:29.147 回答