make-файл с несколькими заголовками и пространством имен - PullRequest
0 голосов
/ 02 мая 2018

Я использую общедоступный пакет c ++ с различными исходными файлами.
Я скомпилировал main.cpp, который ссылается на различные заголовки и использует пользовательское пространство имен со следующим кодом:

g++ -g main.cpp nmssmsoftsusy.cpp decays.cpp /path/config.h -o main

, где 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); 

Тогда я получил такие ошибки, как

неопределенная ссылка на `FPE_ExceptionHandler (int) '

Есть несколько ошибок такого рода, даже после того, как я изменил .h на файлы .cpp или включил softsusy.h.

Могу ли я спросить вас об источнике ошибки в моей команде компиляции или предложить содержание в make-файле, которое я могу попробовать в следующий раз?

Обратите внимание, что я новичок в запуске кода с использованием make-файла, и было бы замечательно, если бы вы дали или предложите мне краткое объяснение того, как организовать make-файл. Благодаря.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Сначала вы должны скомпилировать сам пакет и получить библиотеки, с которыми ваша программа ссылается позже:

Что нужно сделать:

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, потому что у моей коробки более новая версия автоинструментов.

0 голосов
/ 02 мая 2018

Может быть, вам стоит попробовать создать Makefile. Там вы можете скомпилировать nmn .. в объектный файл и decays.cpp в объектный файл. Наконец, вы можете скомпилировать ваш main.cpp. Для подробного объяснения см. http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...