#c
#c
Вопрос:
По сути, я хочу, чтобы моя основная программа была правильно связана с одной библиотекой ‘libA.so ‘, и символы ‘subFunc’ из этой библиотеки могут быть взяты из другой библиотеки (xxx), но эти символы ‘funcB’ не будут использоваться основной программой. Я компилирую их следующим образом: libA.so
int subfunc(int a, int b);
int funcB(int a, int b) {
return subfunc(a, b);
}
int funcA(int a, int b) {
return a b;
}
main.cc
#include <stdio.h>
int funcB(int a, int b);
int main()
{
funcB(1,2);
printf("hellon");
return 0;
}
gcc --shared libA.cc -o libA.so
gcc main.cc libA.so -o main -Wl,--allow-shlib-undefined
./main
‘./main’ может нормально работать в Linux, но когда я их скомпилирую:
aarch64-linux-gnu-gcc --shared libA.cc -o libA.so
aarch64-linux-gnu-gcc main.cc libA.so -o main -Wl,--allow-shlib-undefined
затем запустите на платформе ‘arm’,
‘./ main’ получить уведомление:
./main: ошибка поиска символов: libA.so : неопределенный символ: _Z7subfuncii
Любые советы для меня, я буду очень благодарен.
Комментарии:
1. Почему
.cc
, а не просто.c
(вопрос, помеченный как c)? Возможно, кросс-компилятор пытается обработать исходный код как файл c из-за этого. Но это просто предположение, основанное на искаженном подобном имени_Z7subfuncii
.2. братан, спасибо за твой ответ. когда я использую g , в Linux точно есть «неопределенный символ: _Z7subfuncii». Но почему нет ошибки при использовании gcc в Linux.
3. добро пожаловать, и вы не знаете, почему нет ошибки.
4. Сообщение об ошибке
undefined symbol: _Z7subfuncii
имеет смысл: вlibA.cc
, вы объявилиint subfunc(int a, int b);
, но вы никогда не реализовали его. Неудивительно, что компилятор не может найти этот символ. Я думаю, вы также получите сообщение об ошибке на другом компиляторе, как только вы включите все предупреждения. (-Wall --pedantic
).5. Ксавер, спасибо за твой ответ. то, что вы сказали, правильно. Интересно, почему это работает с компилятором gcc. даже если ‘subfunc’ никогда не будет реализован.