LINUX.ORG.RU

Одинаковые имена функций в разных библиотеках


0

0

Народ!
Есть необходимость слинковать прогу с двумя статическими либами, в которых имеется функции с одинаковыми именами. При линковке выдется следующее:

/common/mpich-1.2.5..12/lib/libmpich.a(bnr.o): In function `BNR_Init':bnr.o(.text+0x2c0): multiple definition of `BNR_Init'
/common/PACX/lib/libpacx.a(BNR_Init.o):/home/runmvs/PACX/PACX-5.0-beta/src/bnr/B NR_Init.c:36: first defined here
/usr/bin/ld: Disabling relaxation: it will not work with multiple definitions
/usr/bin/ld: Warning: size of symbol `BNR_Init' changed from 640 to 320 in bnr.o

bnr.o(.text+0x480): multiple definition of `BNR_Fence'
/common/PACX/lib/libpacx.a(BNR_Fence.o):/home/runmvs/PACX/PACX-5.0-beta/src/bnr/ BNR_Fence.c:32: first defined here
/usr/bin/ld: Warning: size of symbol `BNR_Fence' changed from 352 to 384 in bnr.o

Возможно ли вообще скомпилировать таким образом скомпилировать программу? Может быть какие-то опуии компилятора?

P.S.
Компилил как gcc так и Intel cc. Результат одинаков.


Ну ты сам подумай. Статическая либа - просто куча обжей. Откуда же линкер узнает, какой из двух символов с одинаковыми именами ты используешь? Если ты их НЕ используешь (это вряд ли)... ну, попробуй достать из либы все обжи которые тебе реально нужны, и слинкуй с ними. Хотя линкер в принципе должен тянуть только те символы, которые точно нужны.

anonymous
()

Есть одна идейка. Сделай обвертку вокруг обеих либ. Пускай обвертки содержат только используемые тобой функции.

Самое главная: каждая обвертка должна иметь свой namspace. В резултьте прога будет линковаться с либами: wrapper1 (функция lib1::function()) и wrapper2 (функция lib2::function()).

svyatogor ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.