手工生成的Makefile中的未定义引用

问题描述 投票:0回答:1

我对此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中有什么问题?有人可以帮我吗?谢谢!

windows makefile g++ gtkmm
1个回答
1
投票

所以,我发现了问题...我必须在AffittiApp部分中放入$(LDLIBS)。像这样(完整的代码)

    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

我写了这个答案,以防有人遇到同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.