Windows 手工生成的Makefile中未定义的引用
我对这个生成文件有问题,我得到一个奇怪的gtkmm错误Windows 手工生成的Makefile中未定义的引用,windows,makefile,g++,gtkmm,Windows,Makefile,G++,Gtkmm,我对这个生成文件有问题,我得到一个奇怪的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 LDL
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中出错了什么?谁能帮帮我吗?谢谢 因此,我发现了问题……我必须在AffittiApp部分中放入$(LDLIBS)。像这样(完整的代码)
我写了这个答案,以防有人有同样的问题。你引用了
MYSQL\u DIR
,然后添加了/include
<代码>生成语法不使用引号。此外,您还可以为所有.cpp-s创建一个通用模式规则。谢谢,但我仍然会遇到错误。我用更多的细节编辑了这篇文章
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