2

我有以下代码

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

4

0 回答 0