我复活了我的一些旧代码,令人沮丧的是我现在无法编译。链接时未定义的引用错误表明存在一些奇怪的静态库问题,但是当我链接到对我来说没有意义的标准 gtkmm 库时。
我正在使用 GNU autotools 并且从头开始,即:
aclocal
automake --gnu --add-missing
autoconf
./configure
make
我已将问题简化为一个非常简单的测试用例:
#include <gtkmm/main.h>
#include <gtkmm/window.h>
int main(int argc, char *argv[])
{
Gtk::Main kit(argc, argv);
Gtk::Window window;
Gtk::Main::run(window);
return EXIT_SUCCESS;
}
并在链接时调用 g++:
g++ `pkg-config gtkmm-2.4 --cflags` -ggdb -g -O2 `pkg-config gtkmm-2.4 --libs` -o simple src/simple.o
这导致
src/simple.o: In function `main':
/home/ben/projects/qctviewer/src/simple.cpp:6: undefined reference to `Gtk::Main::Main(int&, char**&, bool)'
但我可以像这样手动链接:
g++ -ggdb -g -O2 -o simple src/simple.o `pkg-config gtkmm-2.4 --cflags` `pkg-config gtkmm-2.4 --libs`
也许我的自动工具设置有问题,所以供参考:
生成文件.am
AUTOMAKE_OPTIONS = subdir-objects
AM_CXXFLAGS = `pkg-config gtkmm-2.4 --cflags` -ggdb
AM_LDFLAGS = `pkg-config gtkmm-2.4 --libs`
bin_PROGRAMS = simple
simple_SOURCES = src/simple.cpp
配置.ac
AC_PREREQ([2.68])
AC_INIT([qctviewer], [0.4.0], [ben@zass.bangham.com], [qctviewer], [http://bangham.com/qctviewer])
AC_CONFIG_SRCDIR([src/palette.cpp])
AC_CONFIG_HEADERS([config.h])
AC_PROG_CXX
AC_PROG_CC
AC_HEADER_STDBOOL
AM_INIT_AUTOMAKE([1.9 foreign])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
如果相关,安装的相关库是:
ben@linux:~$ dpkg --get-selections | grep gtkmm
libgtkmm-2.4-1c2a install
libgtkmm-2.4-dev install
libgtkmm-3.0-1 install
libgtkmm-3.0-dev install
我已经对 3.0 库运行了这个,结果相同。
TIA,本。