У меня проблема с g ++ созданием приложения, которое ссылается на статическую библиотеку, где последняя должна содержать некоторые глобальные функции, написанные во внешних asm-файлах, скомпилированных с yasm.Итак, в библиотеке у меня есть
#ifdef __cplusplus
extern "C" {
#endif
extern void __attribute__((cdecl)) interp1( char *pSrc );
extern void __attribute__((cdecl)) interp2( char *pSrc );
#ifdef __cplusplus
}
#endif
, на которую я ссылаюсь в другом месте внутри библиотеки.Затем есть реализация в asm-файле, например:
section .data
; (some data)
section .text
; (some text)
global _interp1
_interp1:
; (code ...)
ret
global _interp2
_interp2:
; (code ...)
ret
Компиляция и компоновка отлично работают для библиотеки, я делаю
yasm -f elf32 -O2 -o interp.o interp.asm
, а затем
ar -rc libInterp.a objs1.o [...] objsN.o interp.o
ranlib libInterp.a
Теперь, наконец, чтобы связать библиотеку с основным приложением, я делаю
g++ -O4 -ffast-math -DNDEBUG -fomit-frame-pointer -DARCH_X86 -fPIC -o ../bin/interp this.o that.o -lboost_thread -lpthread ./libInterp.a
и получаю ошибки
undefined reference to `interp1'
undefined reference to `interp2'
Что я здесь не так делаю?любая помощь приветствуется.