2011-12-22 4 views
4

У меня есть библиотека, управляемая autotools. У меня есть следующие строки в Makefile.am, а также другие необходимые конфигурацииКак заставить тестовую программу связываться со статической библиотекой, созданной libtool

lib_LTLIBRARIES = libstuff.la 

Мой проект также строит программу для запуска некоторых тестов. Эта программа имеет следующую конфигурацию:

noinst_PROGRAMS = runtests 
runtests_SOURCES = test/stuff.c stuff.h 
runtests_LDADD = libstuff.la 

Однако программа всегда связана с динамической версией libstuff.la, что усложняет некоторые ситуации (например, отладки с gdb). Как я могу заставить программу связываться с libstuff.a вместо libstuff.so или эквивалентной динамической библиотеки?

+0

Отладка не сложно. Вам просто нужно запомнить все префикс с помощью 'libtool --mode = execute'. Для gdb это означает: 'libtool --mode = выполнить gdb runtests'. Просто как тот. –

+0

@ jørgensen это, кажется, хорошее решение, но не сработало. Я запускал 'libtool --mode = execute gdb runtests' и получил ' libtool: неизвестный символ опции '- 'in: --mode = execute'. Использование 'i686-apple-darwin10-gcc-4.2.1' в Mac OS и autotools 2.61. – brandizzi

ответ

8

Правильный способ сделать это - добавить флаг -static в переменную LDFLAGS. Для всех целей: AM_LDFLAGS = -static

Или специально для тестовой программы: runtests_LDFLAGS = -static

+0

Хороший! Это делает мой ответ ненужным. – Jan

+0

Я пробовал это, но, похоже, это не влияет - я добавляю это, autoreconf, чист и перестраиваю, но все по-прежнему связано динамически. Я попробовал -все-статично, но это тоже не имеет никакого эффекта ... –

+0

@ChrisDodd - вы имеете в виду, что внешние динамические библиотеки все еще используются? Или полностью автономные библиотеки внутри самого пакета? например Опция '-статического' automake' s не поможет, если вы полагаетесь на внешний 'libpng', например. –