我有以下代码
#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 和 boost 1.53(我下载并构建了)。知道有什么问题吗?是提升中的错误还是我的代码中有错误?