我正在使用包含各种源文件的公共c ++包 我编译了main.cpp,它引用了各种头文件,并使用了一个用户定义的命名空间,代码如下:
#include "main.h"
#include "nmssmsoftsusy.h"
#include "decays.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
using namespace softsusy;
int main() {
/// Sets up exception handling
signal(SIGFPE, FPE_ExceptionHandler);
其中main.cpp是
{{1}}
然后我遇到了诸如
之类的错误对'FPE_ExceptionHandler(int)'
的未定义引用
即使我将.h更改为.cpp文件或包括softsusy.h,也会出现此类错误。
我可以问你编译命令中的错误来源,还是我下次可以尝试的makefile中的内容建议?
请注意我是使用makefile运行代码的新手,如果您给出或建议我如何组织makefile的简要说明,那将是很棒的。感谢。
答案 0 :(得分:0)
首先,您必须编译软件包本身并获取您的程序稍后链接的库:
你需要做什么:
aclocal
./configure
make
之后你有很多像这样的库(静态的)
./.libs/libsoft.a
./.libs/libtsil.a
./.libs/libsupermodel.a
或者这些(动态的):
./.libs/libsoft.so.0
./.libs/libsupermodel.so.0
./.libs/libsoft.so.0.0.0
./.libs/libtsil.so.0
./.libs/libtsil.so.0.0.0
./.libs/libsupermodel.so.0.0.0
./.libs/libsupermodel.so
./.libs/libtsil.so
./.libs/libsoft.so
如果您现在想要编译自己的 main.cpp项目,那么您就可以了 根据需要链接库。我可以使用以下命令编译和链接main.cpp:
g++ main.cpp -I softsusy-4.1.1/src/ -L/home/krud/softsusy/softsusy-4.1.1/.libs -lsoft -ltsil -lsupermodel -o go
所有内容都写在软件包的INSTALL和README文件中,也包含在软件包的文档中。
如果您不知道如何链接库,则必须启动一个新问题,因为它与Makefile实际上没有任何关系,并且没有提及所提到的源代码包。
信息:我只需将版本4.1.1下载为tgz,就可以在我的电脑上完成一分钟。打开包装并提前3步我准备好了一切。只有aclocal
需要添加,因为我的盒子有一个较新的autotools版本。
答案 1 :(得分:-1)
也许你应该尝试创建一个Makefile。 在那里,您可以将nmn ..编译为目标文件,将decays.cpp编译为目标文件。最后,您可以编译main.cpp。有关详细说明,请参阅http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/