3

Macにブーストをインストールしました。(インストールされた MacPorts、sudo ポート インストール ブースト) XCode で、ヘッダー検索パス (/opt/local/include) とラ​​イブラリ検索パス (/opt/local/lib) を追加し、ライブラリをビルド フェーズに追加しました - ライブラリとバイナリをリンク (libboost_filesystem- mt.a、libboost_filesystem-mt.dylib、libboost_system-mt.a、libboost_system-mt.dylib)。今、私はこのコードをビルドして実行しようとしています

#include <iostream>
#include <string>
#include <boost/filesystem.hpp>

int main() {
    std::string filename;
    std::cin >> filename;
    std::cout << boost::filesystem::exists(filename);

    return 0;
}

そして、入力された任意のパスで、私は Segmentation Fault: 11 when calling exists() を得ました。

私は何を間違えましたか?ブーストをインストールする際に間違いはありませんか?

4

2 に答える 2

3

ブーストがCXXFLAGSプログラムと同じように構築されていない場合、過去に同様の問題に遭遇しました。これは、ブートストラップ命令の疑似完全セットです。

# Configure, build, and install boost
./bootstrap.sh \
  --prefix=${PWD}/.local \
  --with-libraries=...,filesystem,...
./b2 \
  -q \
  -d2 \
  -j4 \
  --debug-configuration \
  --disable-filesystem2 \
  --layout=tagged \
  --build-dir=${PWD}/obj \
  cxxflags="-v -std=c++11 -stdlib=libc++" \
  linkflags="-stdlib=libc++" \
  link=shared \
  threading=multi \
  install

重要な部分はcxxflagsandlinkflagsです。私の経験では、ほとんどの場合、macports は using を使用せずにコンパイルされるためですが、コンパイルコードを使用-stdlib=libc++する場合はそれが必要です。一般的な症状には、ブースト ライブラリ/テンプレートの奥深くに埋め込まれた特定の構造体内のポインターに問題があることを示す、gdb のランダムなバックトレースが含まれます。C++11-std=c++11

上記からわかるように、boost のローカル コピーをプロジェクトごとのディレクトリ (例: ${PWD}/.local) にビルドし、開発中にパッケージ化するまでローカル バージョンにリンクします (その時点で、静的にリンクするか、何か他のことを行います)。 )。

# In a GNUmakefile
LOCAL_DIR=${PWD}/.local
INC_DIR=${LOCAL_DIR}/include
LIB_DIR=${LOCAL_DIR}/lib

CPPFLAGS=-I"${INC_DIR}"
CXXFLAGS=-std=c++11 -stdlib=libc++
LDFLAGS=-stdlib=libc++ -L"${LIB_DIR}"

MYPROG_SRCS=myprog.cpp
MYPROG_OBJS=$(MYPROG_SRCS:.cpp=.o)

%.o : %.cpp %.hpp
        ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<

myprog: ${MYPROG_OBJS}
        ${CXX} ${LDFLAGS} -o $@ $^ ${LIBS}

結論:ブーストとプログラムを一致させる必要がありますCPPFLAGSLDFLAGS

于 2013-10-19T19:58:19.967 に答える
0

私はちょうどそれを試してみましたが、うまくいくようです - 私はあなたのコードを次のように構築しました:

$ g++ -Wall -lboost_system-mt -lboost_filesystem-mt boost_filesystem.cpp

これは Xcode 5 を使用しており、boost 1.51.0 はhttp://boost.orgから直接ダウンロードして にインストールされてい/usr/localます。

于 2013-10-19T19:12:18.037 に答える