как слинковать проект на линуксе?

собираю опенсорс проект, который написан под виндовс. сделал makefile, собрал все объекты, не могу слинковать. во время сборки объектов проблем не было. в результате должна получиться статическая библиотека. под виндовс это была name.LIB. полагаю, мне нужно собрать name.A. makefile:

_FLAGS = -I/usr/include/SDL2 -lSDL2 -I./include -I./include/psx -Wno-narrowing
CFLAGS += $(_FLAGS)
CXXFLAGS += $(_FLAGS)
BUILD_DIR = ./build
OBJ_DIR = $(BUILD_DIR)/objects
SOURCE_DIR = ./src
TARGET = PsyCross
LOW_CC_SRC = $(wildcard $(SOURCE_DIR)/*.c) $(wildcard $(SOURCE_DIR)/*/*.c)
CAPS_CC_SRC = $(wildcard $(SOURCE_DIR)/*.C) $(wildcard $(SOURCE_DIR)/*/*.C)
LOW_CC_OBJ = $(patsubst $(SOURCE_DIR)/%.c,$(OBJ_DIR)/%.o,$(LOW_CC_SRC))
CAPS_CC_OBJ = $(patsubst $(SOURCE_DIR)/%.C,$(OBJ_DIR)/%.O,$(CAPS_CC_SRC))
CXX_SRC = $(wildcard $(SOURCE_DIR)/*.cpp) $(wildcard $(SOURCE_DIR)/*/*.cpp)
CXX_OBJ = $(patsubst $(SOURCE_DIR)/%.cpp,$(OBJ_DIR)/%.opp,$(CXX_SRC))
OBJ =  $(LOW_CC_OBJ) $(CAPS_CC_OBJ) $(CXX_OBJ)
.PHONY: all
all: $(OBJ)
    $(CC) -lm -lopenal $(_FLAGS) $(OBJ) -o $(TARGET)

$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.c
    mkdir -p $(dir $@)
    $(CC) $(CFLAGS) -c $< -o $@
$(OBJ_DIR)/%.O: $(SOURCE_DIR)/%.C
    mkdir -p $(dir $@)
    $(CC) $(CFLAGS) -c $< -o $@
$(OBJ_DIR)/%.opp: $(SOURCE_DIR)/%.cpp
    mkdir -p $(dir $@)
    $(CXX) $(CXXFLAGS) -c $< -o $@

пишет ошибки

/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/Scrt1.o: в функции «_start»:
(.text+0x1b): undefined reference to `main'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
make: *** [makefile:17: all] Ошибка 1

сам разобрался. библиотеки нужно собирать с помощью ar, а не gcc


Ответы (0 шт):