LINUX.ORG.RU

Сообщения AndrewNew

 

Как избежать сквозной линковки shared библиотек в cmake?

Доброго времени суток. Подскажите, есть ли возможность сделать цепочную линковку библиотек и исполняемого файла в cmake? На данный момент я пытаюсь написать враппер над библиотекой и уже непосредственно работать с исполняемым файлом через вреппер. В случае если я удалю libmain.so что бы исполняемый файл через ldd указывал что имеет взамисвязь только с libwrapper.so и собственно запускался, но не выполнял никакого полезного действия.


Цепочка выглядит так: output–>libwrapper.so–>libmain.so С данным кодом у меня output смотри напрямую на libmain.so

cmake_minimum_required(VERSION 3.6)
project(example)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_library(main SHARED main.cpp)
add_library(wrapper SHARED wrapper.cpp)

target_link_libraries(wrapper PUBLIC main)

add_executable(output output.cpp)
target_link_libraries(output PRIVATE wrapper ${CMAKE_THREAD_LIBS_INIT} )

Как выглядит ldd output:

linux-vdso.so.1 (0x00007fff60bd4000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd9fb241000)
	libmain.so => /home/sysos/Desktop/test/example/build/main.so (0x00007fd9fa852000)
	libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd9fa670000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd9fa655000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd9fa463000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fd9fb2a7000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd9fa314000)

Как выглядит ldd libwrapper.so:

linux-vdso.so.1 (0x00007ffef76a5000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f577fa85000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f577fc94000)

Заранее спасибо.

 , ,

AndrewNew
()

RSS подписка на новые темы