我试图开始预制,但我无法让我的测试项目与之正确联系。如果我手动链接它,它可以正常工作。
我在使用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;
}
感谢您的时间。
答案 0 :(得分:1)
这是一个已知的预制错误。它被报道并修复,但该程序的固定版本尚未发布。请参阅讨论here。
此错误是由-Wl,-x
链接器标志引起的,预制器将默认添加到project.make
生成文件中。截至目前,有两种可能的解决方案,使用修补程序下载更新的预制源,编译并安装新版本,或者在每次运行后手动更改生成的LDFLAGS
中project.make
的值预制。
我也在上面的链接中尝试了将premake.tools.gcc.ldflags.flags._Symbols
设置为nil
的建议,但它对我的系统没有影响。