Неопределенные ссылки в созданном вручную Makefile - PullRequest
0 голосов
/ 21 января 2020

У меня проблема с этим Makefile, я получаю странную ошибку gtkmm.

CXX=g++
MYSQL_DIR=C:/Program\ Files/MySQL/Connector\ C++\ 1.1/
# -W -Wall -Wextra -Werror
CXXFLAGS=-Wall -std=c++11 $(shell pkg-config --cflags gtkmm-3.0) -I$(MYSQL_DIR)/include -IC:/local/boost_1_72_0
OBJECTS= main.o 
LDLIBS=$(shell pkg-config --libs gtkmm-3.0) -LC:/local/boost_1_72_0/libs -L$(MYSQL_DIR)/lib -LC:/Program\ Files/MySQL/Connector\ C++\ 1.1/lib/opt -lmysqlcppconn -lmysqlcppconn-static

AffittiApp: $(OBJECTS) 
    $(CXX) $(OBJECTS) -o AffittiApp 

main.o: MainWindow.h MainWindow.cpp Affitto.h Affitto.cpp Conguaglio.h Conguaglio.cpp Inquilino.h Inquilino.cpp Stabile.h Stabile.cpp
    $(CXX)  $(CXXFLAGS)  $(LDLIBS) -c main.cpp MainWindow.cpp Affitto.cpp Conguaglio.cpp Inquilino.cpp Stabile.cpp

clean :
    rm -f AffittiApp
    rm *.o
    echo "pulizia completata"

С этой командой g ++ все отлично работает

g++ -Wall -std=c++11 Conguaglio.h Conguaglio.cpp Stabile.h Stabile.cpp Inquilino.h Inquilino.cpp Affitto.h Affitto.cpp MainWindow.h MainWindow.cpp main.cpp `pkg-config gtkmm-3.0 --cflags --libs` -IC:/Program\ Files/MySQL/Connector\ C++\ 1.1/include -LC:/Program\ Files/MySQL/Connector\ C++\ 1.1/lib -IC:/local/boost_1_72_0 -LC:/local/boost_1_72_0/libs -LC:/Program\ Files/MySQL/Connector\ C++\ 1.1/lib/opt -lmysqlcppconn -lmysqlcppconn-static

Я получаю следующие ошибки :

 main.o:main.cpp:(.text+0x35): undefined reference to `Glib::ustring::ustring(char const*)'
    main.o:main.cpp:(.text+0x67): undefined reference to `Gtk::Application::create(int&, char**&, Glib::ustring const&, Gio::ApplicationFlags)'
    main.o:main.cpp:(.text+0x76): undefined reference to `Glib::ustring::~ustring()'
    main.o:main.cpp:(.text+0x82): undefined reference to `MainWindow::MainWindow()'
    main.o:main.cpp:(.text+0xa0): undefined reference to `Gtk::Application::run(Gtk::Window&)'
    main.o:main.cpp:(.text+0xb1): undefined reference to `MainWindow::~MainWindow()'
    main.o:main.cpp:(.text+0xd6): undefined reference to `Glib::ustring::~ustring()'
    main.o:main.cpp:(.text+0xf0): undefined reference to `MainWindow::~MainWindow()'
    exe: error: ld returned 1 exit status
       make: *** [Makefile:11: AffittiApp] Error 1

Что я не так в Makefile? Может кто-нибудь помочь мне, пожалуйста? Спасибо!

1 Ответ

1 голос
/ 23 января 2020

Итак, я обнаружил проблему ... Я должен поместить $ (LDLIBS) в раздел AffittiApp. Вот так (полный код)

    CXX=g++
    MYSQL_DIR=C:/Program\ Files/MySQL/Connector\ C++\ 1.1/
    CXXFLAGS=-Wall -std=c++11 $(shell pkg-config --cflags gtkmm-3.0) -I$(MYSQL_DIR)/include -IC:/local/boost_1_72_0
    OBJECTS= main.o MainWindow.o Affitto.o Inquilino.o Stabile.o Conguaglio.o
    LDLIBS=$(shell pkg-config --libs gtkmm-3.0) -LC:/local/boost_1_72_0/libs -L$(MYSQL_DIR)/lib -L$(MYSQL_DIR)/lib/opt -lmysqlcppconn -lmysqlcppconn-static

    AffittiApp: $(OBJECTS) 
        $(CXX) $(OBJECTS) $(LDLIBS) -o AffittiApp 

    main.o: MainWindow.h MainWindow.cpp Affitto.h Affitto.cpp Conguaglio.h Conguaglio.cpp Inquilino.h Inquilino.cpp Stabile.h Stabile.cpp
        $(CXX)  $(CXXFLAGS) -c main.cpp

Я написал этот ответ на случай, если у кого-то возникнет такая же проблема.

...