我有以下代码
#include <boost/filesystem.hpp>
class A
{
public:
A()
{
boost::filesystem::path exePath = boost::filesystem::read_symlink("/proc/self/exe");
}
};
#if defined(GLOBAL_VER) && !defined(LOCAL_VER)
A a;
#endif
int main()
{
#if !defined(GLOBAL_VER) && defined(LOCAL_VER)
boost::filesystem::path exePath = boost::filesystem::read_symlink("/proc/self/exe");
#endif
return 0;
}
我使用标记LOCAL_VER
和GLOBAL_VER
对其进行编译,并静态和动态地链接它。当我动态链接它时,程序运行正常没问题
$ g++ test.cpp -I /boost/ -L /boost/stage/lib/ -lboost_filesystem -lboost_system -DLOCAL_VER -o test ; ./test
$ g++ test.cpp -I /boost/ -L /boost/stage/lib/ -lboost_filesystem -lboost_system -DGLOBAL_VER -o test ; ./test
当我静态链接它时,只有我使用LOCAL_VER
编译的版本运行正常,而我用GLOBAL_VER
编译的程序崩溃。
$ g++ test.cpp -I /boost/ /boost/stage/lib/libboost_filesystem.a /boost/stage/lib/libboost_system.a -DLOCAL_VER -o test ; ./test
$ g++ test.cpp -I /boost/ /boost/stage/lib/libboost_filesystem.a /boost/stage/lib/libboost_system.a -DGLOBAL_VER -o test ; ./test
Segmentation fault (core dumped)
我在fc17上使用g ++ 4.7.2,并且使用了1.53(我下载并构建了)。知道什么是错的吗?这是一个提升中的错误还是我的代码中有错误?