Как связать код С++ с libguile с помощью guile-1.8.8?

Я хочу внедрить хитрость в приложение на С++, но при попытке компиляции получаю ошибки «неопределенная ссылка»: Ubuntu 12.04 guile-1.8.8

Если я скомпилирую пример из guile docs

gcc -o guile-test `pkg-config guile-1.8 --cflags` `pkg-config guile-1.8 --libs` guile-test.c

на консоли он прерывается с ошибками:

/tmp/ccHZCHNL.o: In function `inner_main':
guile-test.c:(.text+0x14): undefined reference to `scm_shell'
/tmp/ccHZCHNL.o: In function `main':
guile-test.c:(.text+0x41): undefined reference to `scm_boot_guile'
collect2: ld gab 1 als Ende-Status zurück

Если я скомпилирую какой-нибудь example.so (включая "libguile.h") для встраивания в guile, все будет работать как положено.

Кто-нибудь знает, что может вызвать эту ошибку?

Лучший, Ян-Питер


person Jan-Peter Voigt    schedule 11.02.2014    source источник
comment
Обратите внимание, что я настоятельно рекомендую перейти на Guile 2.x — он значительно быстрее и имеет гораздо более надежную обработку строк в интерфейсе C (с scm_from_utf8_string() и т. д.).   -  person Peter T.B. Brett    schedule 14.03.2014
comment
Я бы подумал об этом, но я жду, когда lilypond перейдет на guile 2, что, надеюсь, произойдет в этом году.   -  person Jan-Peter Voigt    schedule 14.03.2014


Ответы (1)


Да. Вы неправильно следовали их инструкциям по сборке. :-) В частности, необходимо указать зависимости ссылок после зависимых объектов. Попробуйте это вместо этого:

gcc -o guile-test `pkg-config guile-1.8 --cflags` guile-test.c `pkg-config guile-1.8 --libs`

В частности, библиотеки должны быть перечислены после всех объектов, которые их используют, например guile-test.c.

(Кстати, это не специфично для Guile. Стандартный компоновщик всегда ожидает такой порядок.)

person Chris Jester-Young    schedule 11.02.2014