Ошибка Компиляция общих библиотек с -fPIC - PullRequest
3 голосов
/ 09 декабря 2011

Когда я запускаю демон snmpd на плате powerpc (a.p.), Я получаю эту ошибку:

R_PPC_REL24: Compile shared libraries with -fPIC!
/usr/local/sbin/snmpd: symbol 'strlen': can't handle reloc type 0xa in lib
/lib/libnetsnmpmibs.so.15'
sh: you need to specify whom to kill

Я гуглил и обнаружил, что флаг -fPIC должен присутствовать во время компиляции, а его место должно быть сразу после gcc, поэтому я соответственно изменил свой Makefie. Вот фрагмент моего make-файла:

$(Q)cd $(PROJECT_BUILD_DIR)/$(NET_SNMP_PKG) && ./configure --target=$(TARGET_TRIPLET) \  
        --host=$(HOST_TRIPLET) \
        --build=$(BUILD_TRIPLET) \   
        --with-cc="$(CR_COMPLR)gcc -fPIC" \`  
        --with-cflags="-Os -I$(RFS)/lib -I$(NMS_DIR)/include" \`  
        --with-linkcc="$(CR_COMPLR)gcc -fPIC" \`    

Как вы видите, я вставил -fPIC сразу после gcc, но я все еще получаю сообщение об ошибке. Я кросс-скомпилирован для платформы PowerPC, и я использую последние buildroot-2011.11 и gcc 4.3.6 и uClibc версии 0.9.32. В чем может быть причина ошибки?

P.S. Когда я делаю nm libnetsnmpmibs.so.15 | grep strlen, тогда я получаю вывод как U strlen. Значит ли это, что оно не определено?

1 Ответ

1 голос
/ 04 января 2012

У меня проблема.на самом деле главное - компилировать только с -fPIC.

В моем случае я правильно компилировал snmp библиотеки с -fPIC, но некоторые функции зависели от библиотек других пакетов (nms).Поскольку я работаю над разработкой прошивки, в ней задействовано более 20 пакетов.Поэтому я скомпилировал nms библиотеки с -fPIC, и ошибка устранена.

...