无法通过预制将我的解决方案中的其他项目链接起来

时间:2014-03-27 13:44:07

标签: c++ premake

我试图开始预制,但我无法让我的测试项目与之正确联系。如果我手动链接它,它可以正常工作。

我在使用clang 3.4的OS X 10.9上使用premake 4.3(也使用premake 4.4进行了测试)。

通过" premake4 gmake"创建一个makefile之后并尝试编译它我收到这样的错误:

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;
}

子项目/包含/ 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;
}

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

这是一个已知的预制错误。它被报道并修复,但该程序的固定版本尚未发布。请参阅讨论here

此错误是由-Wl,-x链接器标志引起的,预制器将默认添加到project.make生成文件中。截至目前,有两种可能的解决方案,使用修补程序下载更新的预制源,编译并安装新版本,或者在每次运行后手动更改生成的LDFLAGSproject.make的值预制。

我也在上面的链接中尝试了将premake.tools.gcc.ldflags.flags._Symbols设置为nil的建议,但它对我的系统没有影响。