2

プリメイクを始めようとしていますが、テスト プロジェクトをプリメイクと正しくリンクさせることができません。手動でリンクしても問題なく動作します。

私はOS X 10.9でclang 3.4でpremake 4.3(premake 4.4でもテスト済み)を使用しています。

「premake4 gmake」でメイクファイルを作成し、コンパイルしようとすると、次のようなエラーが発生します。

Linking subproject
ld: internal error: atom not found in symbolIndex(__ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc) for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [libsubproject.dylib] Error 1
make: *** [subproject] Error 2

私の非常に単純なプロジェクト設定:

project/
    src/
        test.cpp
    subproject/
        include/
            Library.hpp
        source/
            Library.cpp
    premake4.lua

premake4.lua

solution "testa"
    configurations {"debug"}
    language "C++"

    includedirs {"subproject/include"}

    project "subproject"
        kind "SharedLib"
        files {"subproject/source/*.cpp"}

    project "main"
        kind "ConsoleApp"
        files {"src/*.cpp"}

        links {"subproject"}

src/test.cpp

#include <iostream>
#include <Library.hpp>

using namespace std;

int main() {
    cout << "Hello, World!" << endl;

    Library lib(13, 3);

    lib.do_stuff(7);

    return 0;
}

サブプロジェクト/include/Library.hpp

#ifndef __LIBRARY_HPP__
#define __LIBRARY_HPP__

#include <iostream>

using namespace std;

class Library {
public:
    Library(int, int);
    void do_stuff(int) const;

private:
    int x;
    int y;

};

#endif

サブプロジェクト/ソース/Library.cpp

#include <Library.hpp>

Library::Library(int x, int y) {
    this->x = x;
    this->y = y;
}

void Library::do_stuff(int z) const {
    cout << "X: " << x << "Y: " << y << "Z: " << z << endl;
}

お時間をいただきありがとうございます。

4

1 に答える 1

1

これは既知のプリメイク バグです。報告されて修正されましたが、プログラムの修正版はまだリリースされていません。ここでの議論を参照してください。

このバグは-Wl,-x、premake がデフォルトでproject.makemakefile に追加するリンカー フラグが原因で発生します。現時点では、2 つの解決策が考えられます。更新された premake ソースを修正と共にダウンロードし、それをコンパイルして新しいバージョンをインストールするか、 premake を実行するたびLDFLAGSに生成されたの値を手動で変更しますproject.make

premake.tools.gcc.ldflags.flags._Symbolsに設定するという上記のリンクで提供されている提案も試しましたがnil、システムには影響しませんでした。

于 2014-07-22T20:16:36.740 に答える