1

私は自分の古いコードをいくつか復活させました。リンク時の未定義の参照エラーは、いくつかの奇妙な静的ライブラリの問題を示唆していますが、標準の 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;
}

make は、リンク時に次のように 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`

私のautotoolsのセットアップに何か問題があるかもしれませんので、参考までに:

Makefile.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

configure.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 ライブラリに対して実行したところ、同じ結果が得られました。

ティア、ベン。

4

1 に答える 1

4

Doh, I finally found the magic search terms which pointed me to the answer.

Linker flags in wrong place shows that I am mis-using LDFLAGS and should instead use LDADD.

Added to configure.ac:

PKG_CHECK_MODULES([libgtkmm], [gtkmm-3.0])

Amended in Makefile.am:

AM_CXXFLAGS = ${libgtkmm_CFLAGS}
# AM_LDFLAGS ....
simple_LDADD = ${libgtkmm_LIBS}
于 2012-10-08T21:23:36.293 に答える