如何在具有相同接口的多个库之间加载一个库
我需要在C ++代码上动态加载库的帮助。
我有几个具有相同API的库(例如:libtest_10.so和libtest_20.so)。
我也知道,即使我在运行时加载了dlopen()库时,我也必须在构建时间上链接共享库。
但是就我而言,我将libtest_1.so和libtest_2.so链接到cmakelists.txt上可执行的测试。
PROJECT(test_main)
ADD_EXECUTABLE(${PROJECT_NAME} main.cpp)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wall -Wextra -rdynamic")
FIND_LIBRARY(LIB_TEST1 NAME test_1 HINTS ../prebuilts)
MESSAGE("libtest_1.so :" ${LIB_TEST1})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC ${LIB_TEST1})
FIND_LIBRARY(LIB_TEST2 NAME test_2 HINTS ../prebuilts)
MESSAGE("libtest_2.so :" ${LIB_TEST2})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC ${LIB_TEST2})
并加载库libtest_2.so用dlopen如下。
#include <dlfcn.h>
void* test_lib_handle = dlopen("/usr/lib/libtest_2.so", RTLD_NOW);
(...)
但是,当我运行可执行文件时,我可以看到“ libtest_2.so”的日志,而是“ libtest_1.so'。
如何加载要选择的库? 有人帮助我有关编译选项或任何其他正确方法吗?
I need a help about dynamically loading a library on C++ code.
I have several libraries having same APIs ( ex: libtest_10.so and libtest_20.so).
Also I know that I have to link a shared library on build time even when I load the library with dlopen() on run-time.
But in my case, I linked the libtest_1.so and libtest_2.so to an test executable on CMakeLists.txt.
PROJECT(test_main)
ADD_EXECUTABLE(${PROJECT_NAME} main.cpp)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wall -Wextra -rdynamic")
FIND_LIBRARY(LIB_TEST1 NAME test_1 HINTS ../prebuilts)
MESSAGE("libtest_1.so :" ${LIB_TEST1})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC ${LIB_TEST1})
FIND_LIBRARY(LIB_TEST2 NAME test_2 HINTS ../prebuilts)
MESSAGE("libtest_2.so :" ${LIB_TEST2})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC ${LIB_TEST2})
and load the library libtest_2.so with dlopen as below.
#include <dlfcn.h>
void* test_lib_handle = dlopen("/usr/lib/libtest_2.so", RTLD_NOW);
(...)
But when I run the executable, I could see the log from not 'libtest_2.so' but 'libtest_1.so'.
How can I load the library I want to pick ?
anyone help me about the compile options or any other proper method?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论