簡體   English   中英

Makefile鏈接錯誤

[英]Makefile linking error

我的Makefile:

CXX = g++
CXXFLAGS = -g -Wall -std=c++14
LDFLAGS = -lboost_system -lcrypto -lssl -lcpprest -lpthread

SRC := $(shell find . -name *.cpp)
OBJ = $(SRC:%.cpp=%.o)
BIN = run

all: $(BIN)

$(BIN): $(OBJ)
    $(CXX) $(LDFLAGS)

%.o: %.cpp
    $(CXX) -c $(CXXFLAGS) $< -o $@

clean:
    find . -name *.o -delete
    rm -f $(BIN)

它會掃描所有子目錄中的所有文件*.cpp文件,並創建相應的*.o文件。 然后,它嘗試將所有內容鏈接到最終的二進制文件中,但出現以下錯誤。 我不知道如何解決這個問題。

/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.1/../../../../lib/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'

目錄結構:

Makefile
sources/
    directory1
        ...cpp
    directory2
        ...cpp
    ...
    main.cpp

main.cpp內容:

#include <iostream>

#include <signal.h>

#include "application/application_launcher.hpp"

Alastriona::Application::Launcher launcher;

void shutdown(int signal);

int main(int argc, const char * argv[])
{
    struct sigaction sa;
    sa.sa_handler = &::shutdown;
    sa.sa_flags = SA_RESTART;
    sigfillset(&sa.sa_mask);

    sigaction(SIGTERM, &sa, NULL);
    sigaction(SIGQUIT, &sa, NULL);
    sigaction(SIGINT, &sa, NULL);

    launcher.loadArguments(argc, argv);
    launcher.loadConfiguration();
    launcher.startApplication();
}

void shutdown(int signal)
{
    launcher.stopApplication();
}
int main(int argc, const char * argv[])

是由於常量性導致的重載, 這是不允許的,並且被標准§2認為格式不正確。 您需要使用的簽名是

int main(int argc, char * argv[])

編輯:嘗試構建目標時,您沒有使用任何先決條件。 你應該有

$(BIN): $(OBJ)
    $(CXX) $^ $(LDFLAGS)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM