我已经增强了信号库,建立了:
./b2 address-model=32 link=static --build-type=complete --with-signals --layout=tagged
简单代码:
#include <iostream>
#include "boost/signal.hpp"
void onSignal() {
std::cout << "Hello from slot" << std::endl;
}
int main() {
boost::signal<void()> sig;
sig.connect(&onSignal);
sig();
return 0;
}
的CMakeLists.txt:
project(test)
cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32 -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)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(${PROJECT_NAME} libboost_signals-mt-s.a)
它构建没有错误,但在runnig时,我有:
bash: ./test: No such file or directory
似乎是,cmake产生动态链接而不是静态:
koshchiy@koshchiy-lin-NB:~/dev/projects/test/test-build-release$ ldd test
linux-gate.so.1 => (0xf778b000)
libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf768e000)
libc.so.6 => /lib32/libc.so.6 (0xf74e7000)
libm.so.6 => /lib32/libm.so.6 (0xf74bc000)
/usr/lib/libc.so.1 => /lib/ld-linux.so.2 (0xf778c000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf749e000)
没有cmake的建设似乎没问题:
g++ -static main.cpp -o test -I... -l...
我正在使用ubuntu 12.04 x64和g ++ - 4.7编译器。
答案 0 :(得分:3)
您的手动构建在没有您在CMAKE_CXX_FLAGS中的CMakeLists.txt中使用的-m32
标志的情况下完成。
因此,使用cmake进行构建会导致32位可执行文件,即使该文件存在,也无法使用“无此文件”,因为您在系统上缺少32位的二进制支持。
删除CMakeFiles.txt的-m32
或尝试为您的系统和gcc版本安装gcc-multilib支持。
如果您想强制静态链接到您的cmake-build检查,this answer可以帮助您。