У меня проблема со сборкой моей общей библиотеки для x86.
Мой Jamfile выглядит примерно так - имена изменились:
import os ;
args = [ modules.peek : ARGV ] ;
local JAVA_HOME = [ os.environ JAVA_HOME ] ;
type = test1 ;
lib $(type)prog
: :
<name>TestChecker
<search> /path/to/lib/x86/lib
<search> /path/to/lib/ppc/lib
: :
<include> /path/to/inc/
;
lib JniApp
: # sources
JniApp.cpp
$(type)prog
: # requirements
<define>JNI
<include>.
<include>/${JAVA_HOME}/include
<include>/${JAVA_HOME}/include/linux
<library>/test.app//app_lib/<link>static
<library>/test.app//app2_lib/<link>static
: # default-build
: # usage-requirements
;
Когда я собираю вышеупомянутую библиотеку (JniApp) для pp c, тогда все в порядке. Однако, когда я пытаюсь собрать для x86, сохранение общей библиотеки не работает. Я должен добавить stati c, и все будет хорошо, будет создана библиотека stati c. Однако мне нужна общая библиотека. Ошибка, которая отображается при сборке x86, следующая:
/path/to/lib/x86/lib/libTestChecker.a(Exceptions.cpp.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/path/to/lib/x86/lib/libTestChecker.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
Библиотека "TestChecker.a" уже существует и не создана мной. Я просто использую его для создания библиотеки JniApp. Я не уверен, почему эта ошибка происходит, но только для x86 и только для общей библиотеки. Я также добавил флаг -fPI C в команду b2, но появляется та же ошибка. Любое понимание будет оценено. Спасибо!