Can';t将boost库与cmake静态链接
我已经建立了boost signals library,它由以下内容构建:Can';t将boost库与cmake静态链接,boost,cmake,Boost,Cmake,我已经建立了boost signals library,它由以下内容构建: ./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" <<
./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;
}
它构建时没有错误,但在运行时,我得到:
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...
我使用的是Ubuntu12.04 x64和g++-4.7编译器。您的手动构建没有使用CMAKE_CXX_标志中的CMakeLists.txt中使用的
-m32
标志
因此,使用cmake生成的结果是一个32位可执行文件,即使该文件存在,也无法使用“无此类文件”,因为您的系统缺少对32位的二进制支持
请删除cmakfiles.txt的-m32
,或者尝试为您的系统和gcc版本安装gcc multilib支持
如果您想强制静态链接到您的cmake生成,请检查是否可以帮助您。如果您在执行时得到“没有这样的文件或目录”。/test我相信您的路径错误,或者它没有生成。~/dev/projects/test/test-build-release/test是否可以更早创建?
g++ -static main.cpp -o test -I... -l...