Неопределенная ссылка на Linux Makefile только при связывании объектов с исполняемым файлом [дубликат]Linux

Ответить Пред. темаСлед. тема
Гость
 Неопределенная ссылка на Linux Makefile только при связывании объектов с исполняемым файлом [дубликат]

Сообщение Гость »


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

Но я уверен, что добавил путь включения и ссылку на библиотеку в настройках g++.

Для этого я копирую и вставляю C_FLAGS во все файлы Makefile, а путь к сторонней библиотеке — абсолютный путь.

Если мой сторонний путь неверен, make сообщит мне, что невозможно найти -lfftw3 при компиляции obj.

Это не так. Поэтому я уверен, что мой сторонний путь правильный.

Но почему я все еще получаю неопределенную ссылку? Спасибо за ответ!

Мой журнал ошибок:

g++ -g -O3 -lm -I/public/home/AAAAA/BBBBB/IBM/../../fftw3/include -L/public/ home/AAAAA/BBBBB/IBM/../../fftw3/lib -lfftw3 -fopenmp -std=c++1z -o /public/home/AAAAA/BBBBB/IBM/build/bin/IBM build/obj/ *.о build/obj/main.o: В функции `NeumannPESolver2D::NeumannPESolver2D(unsigned int, unsigned int)': /public/home/AAAAA/BBBBB/IBM/src/pe_solver/neumann_pe_solver_2d.h:48: неопределенная ссылка на `fftw_plan_dft_r2c_1d' build/obj/neumann_pe_solver_2d.o: В функции `NeumannPESolver2D::solve(No_bound_field&, Neumann_field&) [clone ._omp_fn.0]': neumann_pe_solver_2d.cpp:(.text+0x6c8): неопределенная ссылка на `fftw_execute_dft_r2c' build/obj/neumann_pe_solver_2d.o: В функции `NeumannPESolver2D::solve(No_bound_field&, Neumann_field&) [clone ._omp_fn.2]': neumann_pe_solver_2d.cpp:(.text+0xe90): неопределенная ссылка на `fftw_execute_dft_r2c' neumann_pe_solver_2d.cpp:(.text+0xf10): неопределенная ссылка на `fftw_execute_dft_r2c' Collect2: ошибка: ld вернул 1 статус выхода make: *** [все] Ошибка 1 Моя многоуровневая структура Makefile показана ниже. Существует только два типа Makefile. Один из них помещается в подпапку и является рекурсивным. Другой находится в верхней корневой папке и определяет, какую подпапку создавать.

└─ААААА └─BBBBB ├─fftw3 └─IBM │ Make-файл │ └─источник │ CMakeLists.txt │ main.cpp │ Make-файл │ ... │ ├─помощник │ airfoil_reader.hpp │ Make-файл │ ├─ns_solver │ ib_cylinder.hpp │ ... │ Make-файл │ ├─pe_solver │ Make-файл │ neumann_pe_solver_2d.cpp │ neumann_pe_solver_2d.h │ └─структуры поле.hpp Makefile вар.hpp Мой рекурсивный Makefile:

INCLUDE_DIR = -I../ FFTW_DIR = $(ROOT_DIR)/../../fftw3 C_FLAGS = -g -O3 -lm -I${FFTW_DIR}/include -L${FFTW_DIR}/lib -lfftw3 -fopenmp -std=c++1z SUBDIRS = $(shell ls -l | grep ^d | awk '{print $$9}') CUR_SOURCE = ${подстановочный знак *.cpp} CUR_OBJS = ${patsubst %.cpp, %.o, $(CUR_SOURCE)} все:$(SUBDIRS) $(CUR_OBJS) $(СУБДИРС):ЭКО сделать -C $@ $(CUR_OBJS):%.o:%.cpp $(CC) $(INCLUDE_DIR) $(C_FLAGS) -c $^ -o $(ROOT_DIR)/$(OBJS_DIR)/$@ ЭХО: @echo $(СУБДИАРЫ) Мой верхний корневой Makefile:

CC = g++ SUBDIRS=$(shell ls -l | grep ^d | awk '{if($$9 != "build") print $$9}') ROOT_DIR=$(пароль оболочки) БИН=ИБМ OBJS_DIR=сборка/объект BIN_DIR=сборка/bin экспорт CC BIN OBJS_DIR BIN_DIR ROOT_DIR FFTW_DIR = $(ROOT_DIR)/../../fftw3 C_FLAGS = -g -O3 -lm -I${FFTW_DIR}/include -L${FFTW_DIR}/lib -lfftw3 -fopenmp -std=c++1z все: сделать -C $(СУБДИАРЫ) $(CC) $(C_FLAGS) -o $(ROOT_DIR)/$(BIN_DIR)/$(BIN) $(OBJS_DIR)/*.o .PHONY: очистить, очистить, все чистый: rm -rf ${BIN_DIR} очистить все: rm -rf сборка сборка mkdir мкдир ${OBJS_DIR} мкдир ${BIN_DIR} Я попробовал скопировать и вставить C_FLAGS во все файлы Makefile, и путь к сторонней библиотеке является абсолютным.

Поскольку все компиляции g++ имеют одинаковые параметры, они всегда должны быть правильными, но это не так.

Я ожидаю компиляции objs.

Кстати, я написал однофайловую версию, и она успешно скомпилируется:
FFTW_DIR = ../../fftw3 IBM: ./c_oop_ib_demo.cpp g++ $^ -g -O3 -lm -I${FFTW_DIR}/include -L${FFTW_DIR}/lib -lfftw3 -fopenmp -std=c++11 -o $@
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Неопределенная ссылка на Linux Makefile только при связывании объектов с исполняемым файлом [дубликат]
    Гость » » в форуме C++
    0 Ответы
    47 Просмотры
    Последнее сообщение Гость
  • Какова связь между PIC/PIE, no-PIC/no-PIE, статически связанным исполняемым файлом и динамически связанным исполняемым ф
    Anonymous » » в форуме Linux
    0 Ответы
    76 Просмотры
    Последнее сообщение Anonymous
  • Неопределенная ссылка на RayLibs при связывании с CMake?
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Неопределенная ссылка на RayLibs при связывании с CMake?
    Anonymous » » в форуме C++
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Неопределенная ссылка на `_function_name` при связывании в WSL
    Anonymous » » в форуме Linux
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»