Проблема связывания статической библиотеки с динамической библиотекой - PullRequest
0 голосов
/ 25 марта 2019

Я успешно разработал код с использованием динамической библиотеки. В настоящее время мне нужно перейти на статическую библиотеку. Итак, я собрал библиотеку с помощью make, как указано автором, но когда я попытался собрать свою программу, я столкнулся с этими сообщениями:

/usr/bin/ld: /usr/local/lib/libfft3dmpi.a(remap3d_wrap.o): in function `remap3d_create':
/home/mirco/Scrivania/fftmpi-1Oct18/src/remap3d_wrap.cpp:36: undefined reference to `operator new(unsigned long)'
/usr/bin/ld: /usr/local/lib/libfft3dmpi.a(remap3d_wrap.o): in function `remap3d_create_fortran(int, void**)':
/home/mirco/Scrivania/fftmpi-1Oct18/src/remap3d_wrap.cpp:45: undefined reference to `operator new(unsigned long)'

И так далее .. Я попытался указать в make-файле полный путь к библиотеке или использовать -l(name of the library), но я все еще сталкиваюсь с теми же сообщениями

Мой make-файл

$(CC) -O3 -o exe channel_mpi.o initialization.o convol_trasp.o fft_support.o data_man.o dnsdata.o dnsdirect.o /home/mirco/Scrivania/fftmpi-1Oct18/src/libfft3dmpi.a -lm 

Компилятор h5pcc, это mpicc, обернутый некоторыми флагами для использования библиотеки HDF5.

Я сделал ошибки ??

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 25 марта 2019

operator new - вещь C ++.Кажется, вы строите с кодом C ++, а не C. Переменная makefile $(CC) - это компилятор C, $(CXX) - это компилятор C ++.

Поэтому решение состоит в том, чтобы переключить используемый вами компилятордля компоновки.


При компоновке программы внешнего интерфейса C ++ (обычно g++ в системах Linux) автоматически добавляется стандартная библиотека C ++.Именно эта библиотека содержит стандартные реализации многих стандартных функций C ++, например, функции, необходимые для оператора C ++ new.

Можно также использовать внешний интерфейс C (gcc), но затемВы должны явно связаться с библиотекой C ++.Для gcc это означает, что вы должны добавить -lstdc++.

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