Добрый день. Требуется статически слинковать бинарник с библиотекой signals с помощью cmake. Библиотека собрана следующей командой:
Код | ./b2 address-model=32 link=static --build-type=complete --with-signals --layout=tagged
|
Исходный код:
Код | #include <iostream>
#include "boost/signal.hpp"
void onSignal() { std::cout << "on signal" << std::endl; }
int main() { boost::signal<void()> sig; sig.connect(&onSignal); sig();
return 0; }
|
cmake:
Код | project(test) cmake_minimum_required(VERSION 2.8) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32 -static") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") aux_source_directory(. SRC_LIST) include_directories(/home/koshchiy/dev/boost/boost_1_51_0) link_directories(/home/koshchiy/dev/boost/boost_1_51_0/stage/lib)
add_executable(${PROJECT_NAME} ${SRC_LIST}) target_link_libraries(${PROJECT_NAME} libboost_signals.a)
|
В результате собирается бинарь, при запуске которого получаю:
Код | Cannot execute '/home/koshchiy/dev/projects/test/test-build-release/test': No such file or directory
|
Вот что показывает ldd:
Код | koshchiy@koshchiy-lin-NB:~/dev/projects/test/test-build-release$ ldd test linux-gate.so.1 => (0xf7780000) libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf7683000) libc.so.6 => /lib32/libc.so.6 (0xf74dc000) libm.so.6 => /lib32/libm.so.6 (0xf74b1000) /usr/lib/libc.so.1 => /lib/ld-linux.so.2 (0xf7781000) libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf7493000)
|
Если убрать ключ -static, то бинарник нормально собирается и запускается. Бинарник, собранный статически руками (без cmake) также нормально запускается.
Использую Ubuntu 12.04 x64, gcc-4.7.0
|