6

MXFビデオファイルに関する基本情報を出力する非常に単純なコマンドラインアプリケーションをXcodeで構築しようとしています。これを行うには、ここからダウンロードできるlibmxf、libbmx、およびlibbmxライブラリを使用する必要があります。

http://sourceforge.net/p/bmxlib/home/Home/

私のC++コードは、この時点では非常に単純です。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cerrno>
#include <vector>

#include <bmx/mxf_reader/MXFFileReader.h>
#include <bmx/mxf_reader/MXFGroupReader.h>
#include <bmx/mxf_reader/MXFSequenceReader.h>
#include <bmx/mxf_reader/MXFFrameMetadata.h>
#include <bmx/MXFUtils.h>
#include <bmx/Utils.h>

using namespace std;
using namespace bmx;

#define MXF_OPEN_READ(fn, pf)   mxf_disk_file_open_read(fn, pf)

int main(int argc, const char * argv[])
{
    std::vector<const char *> filenames;
    std::cout << "mxfheader: execution beginning...\n";
    for (int cmdln_index = 0; cmdln_index < argc; cmdln_index++) {
        if (!check_file_exists(argv[cmdln_index])) {
            if (argv[cmdln_index][0] == '-') {
                fprintf(stderr, "Unknown argument '%s'\n", argv[cmdln_index]);
            } else {
                fprintf(stderr, "Failed to open input filename '%s'\n", argv[cmdln_index]);
            }
            return 1;
        }
        filenames.push_back(argv[cmdln_index]);
    }

    std::cout << filenames[0] << "\n";
    return 0;
}

BMXライブラリをコンパイルしたとき、次のように、64ビットをサポートするconfigureを実行する必要がありました。

./configure --build=x86_64-apple-darwin11.4.2 --host=x86_64-apple-darwin11.4.2 CFLAGS="-arch x86_64" CXXFLAGS="-arch x86_64" LDFLAGS="-arch x86_64" CC=clang CXX=clang++

ビルド設定のXCodeプロジェクトで、検索パスに/ usr / local/libを追加しました。ビルドフェーズで、「バイナリとライブラリのリンク」セクションに「libbmx-0.1.3.dylib」、「libMXF-1.0.4.dylib」、「libMXF++-1.0.4.dylib」を追加しました。

これらのライブラリが実際に64ビットであることを確認しました(ファイルlibbmx-0.1.3.dylibはlibbmx-0.1.3.dylibを返します:Mach-O 64ビット動的リンク共有ライブラリx86_64)。

アプリケーションをビルドしようとするたびに、次のリンカーエラーが発生します。

Ld /Users/ned/Library/Developer/Xcode/DerivedData/mxfheader-bkwawmplsoqpdadfxartceqkbolo/Build/Products/Debug/mxfheader normal x86_64
    cd /Users/ned/Documents/src/mxfheader
    setenv MACOSX_DEPLOYMENT_TARGET 10.7
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -L/Users/ned/Library/Developer/Xcode/DerivedData/mxfheader-bkwawmplsoqpdadfxartceqkbolo/Build/Products/Debug -L/usr/local/lib -F/Users/ned/Library/Developer/Xcode/DerivedData/mxfheader-bkwawmplsoqpdadfxartceqkbolo/Build/Products/Debug -filelist /Users/ned/Library/Developer/Xcode/DerivedData/mxfheader-bkwawmplsoqpdadfxartceqkbolo/Build/Intermediates/mxfheader.build/Debug/mxfheader.build/Objects-normal/x86_64/mxfheader.LinkFileList -mmacosx-version-min=10.7 -stdlib=libc++ -lbmx-0.1.3 -lMXF-1.0.4 -lMXF++-1.0.4 -o /Users/ned/Library/Developer/Xcode/DerivedData/mxfheader-bkwawmplsoqpdadfxartceqkbolo/Build/Products/Debug/mxfheader

Undefined symbols for architecture x86_64:
  "bmx::check_file_exists(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

どんな助けでもいただければ幸いです。ありがとう!

4

1 に答える 1

9

あなたの問題はオプションです:-stdlib=libc++コマンドラインで。間違った libc++ へのリンクを引き起こしています。これは、ライブラリがコンパイルさ-stdlib=libstdc++れる stdlib であるため、作成する必要があります。libbmx

Apple LLVM compilerC++ 標準ライブラリのオプションで、選択: libstdc++、または pick compiler default(libstdc++ も選択する必要があります)

于 2012-10-16T18:03:29.433 に答える