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_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(ダウンロードしてビルドしました)を使用しています。何が間違っているのですか?ブーストのバグですか、それともコードにバグがありますか?

4

0 に答える 0