У мене є два комп’ютери з Gentoo, обидва на AMD64. Я намагаюся створити таку програму:
int main() {tgetent();}
Команда для компіляції:
gcc -v 1.c -Wl,--as-needed -lncurses
На одному комп’ютері він не може знайти функцію, а на іншому він може. Без потрібного прапора він належним чином посилається. Версії компіляторів і бінутилів однакові.
Ось журнали на першому та другому верстатах:
Використання вбудованих специфікацій. COLLECT_GCC = / usr / x86_64-pc-linux-gnu / gcc-bin / 4.7.3 / gcc COLLECT_LTO_WRAPPER = / usr / libexec / gcc / x86_64-pc-linux-gnu / 4.7.3 / lto-обгортка Мета: x86_64-pc-linux-gnu Налаштовано з: /var/tmp/portage/sys-devel/gcc-4.7.3-r1/work/gcc-4.7.3/configure --host = x86_64-pc-linux-gnu --build = x86_64-pc- linux-gnu --prefix = / usr --bindir = / usr / x86_64-pc-linux-gnu / gcc-bin / 4.7.3 --includedir = / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 / включають --datadir = / usr / share / gcc-data / x86_64-pc-linux-gnu / 4.7.3 --mandir = / usr / share / gcc-data / x86_64-pc-linux-gnu / 4.7.3 / man --infodir = / usr / share / gcc-data / x86_64-pc-linux-gnu / 4.7.3 / info --with-gxx-include-dir = / usr / lib / gcc / x86_64- pc-linux-gnu / 4.7.3 / include / g ++ - v4 --with-python-dir = / share / gcc-data / x86_64-pc-linux-gnu / 4.7.3 / python --enable-languages = c , c ++, fortran --enable-застарілий --enable-secureplt - відключити-werror --with-system-zlib --enable-nls - без включеного-gettext --enable-check = випуск - with-bugurl = https: //bugs.gentoo.org/ --with-pkgversion = 'Gentoo 4.7.3-r1 p1.4, pie-0.5.5'--enable-libstdcxx-time --enable-shared --enable-thread = posix --enable -__ cxa_atexit --enable-clocale = gnu --dable-multilib --with-multilib-list = m64 --disable-altivec --disable-fix-point --enable-target = all --disable-libgcj --enable-libgomp --disable-libmudflap --disable-libssp --enable-lto --without-cloog --without-ppl Модель нитки: posix gcc версія 4.7.3 (Gentoo 4.7.3-r1 p1.4, pie-0.5.5) COLLECT_GCC_OPTIONS = '- v' '-mtune = generic' '-march = x86-64' /usr/libexec/gcc/x86_64-pc-linux-gnu/4.7.3/cc1 -quiet -v 1.c -quiet -dumpbase 1.c -mtune = generic -march = x86-64 -auxbase 1 -version - o /tmp/cckCeNIy.s GNU C (Gentoo 4.7.3-r1 p1.4, pie-0.5.5) версія 4.7.3 (x86_64-pc-linux-gnu) складено GNU C версії 4.7.3, GMP версії 5.1.2, MPFR версії 3.1.2, MPC версії 1.0.1 Евристика GGC: --param ggc-min-extension = 100 --param ggc-min-hepsize = 131072 ігнорування неіснуючого каталогу "/ usr / local / include" ігнорування неіснуючої каталогу "/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/include" #include "..." пошук починається тут: Пошук тут #include починається: /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include-fixed / usr / включати Кінець списку пошуку. GNU C (Gentoo 4.7.3-r1 p1.4, pie-0.5.5) версія 4.7.3 (x86_64-pc-linux-gnu) складено GNU C версії 4.7.3, GMP версії 5.1.2, MPFR версії 3.1.2, MPC версії 1.0.1 Евристика GGC: --param ggc-min-extension = 100 --param ggc-min-hepsize = 131072 Виконана контрольна сума компілятора: 39edf3479a880e47daebbbcc4040ccab0 COLLECT_GCC_OPTIONS = '- v' '-mtune = generic' '-march = x86-64' /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/as -v --64 -o / tmp / cckazMHs.o /tmp/cckCeNIy.s Версія асемблера GNU версії 2.23.2 (x86_64-pc-linux-gnu) з використанням версії BFD (білети GNU) COMPILER_PATH = / usr / libexec / gcc / x86_64-pc-linux-gnu / 4.7.3 /: / usr / libexec / gcc / x86_64-pc-linux-gnu / 4.7.3 /: / usr / libexec / gcc / x86_64 -pc-linux-gnu /: / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 /: / usr / lib / gcc / x86_64-pc-linux-gnu /: / usr / lib / gcc /x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/ LIBRARY_PATH = / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 /: / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 /../../../ ../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../ .. /../../x86_64-pc-linux-gnu/lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../:/lib/ : / usr / lib / COLLECT_GCC_OPTIONS = '- v' '-mtune = generic' '-march = x86-64' /usr/libexec/gcc/x86_64-pc-linux-gnu/4.7.3/collect2 --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 / usr /lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/4.7 .3 /../../../../ lib64 / crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/crtbegin.o -L / usr / lib / gcc /x86_64-pc-linux-gnu/4.7.3 -L / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 /../../../../ lib64 -L / lib /../lib64 -L / usr / lib /../ lib64 -L / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 /../../../../ x86_64 -pc-linux-gnu / lib -L / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 /../../ .. /tmp/cckazMHs.o - потрібні -нутрі -lgcc - потрібен -lgcc_s --no-as-need -lc -lgcc - потрібен -lgcc_s --no-as-need /usr/lib/gcc/x86_64-pc-linux-gnu/4.7 .3 / crtend.o /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/crtn.o
Використання вбудованих специфікацій. COLLECT_GCC = / usr / x86_64-pc-linux-gnu / gcc-bin / 4.7.3 / gcc COLLECT_LTO_WRAPPER = / usr / libexec / gcc / x86_64-pc-linux-gnu / 4.7.3 / lto-обгортка Мета: x86_64-pc-linux-gnu Налаштовано: /home_old/tmp/portage/sys-devel/gcc-4.7.3-r1/work/gcc-4.7.3/configure --host = x86_64-pc-linux-gnu --build = x86_64-pc- linux-gnu --prefix = / usr --bindir = / usr / x86_64-pc-linux-gnu / gcc-bin / 4.7.3 --includedir = / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 / включають --datadir = / usr / share / gcc-data / x86_64-pc-linux-gnu / 4.7.3 --mandir = / usr / share / gcc-data / x86_64-pc-linux-gnu / 4.7.3 / man --infodir = / usr / share / gcc-data / x86_64-pc-linux-gnu / 4.7.3 / info --with-gxx-include-dir = / usr / lib / gcc / x86_64- pc-linux-gnu / 4.7.3 / include / g ++ - v4 --with-python-dir = / share / gcc-data / x86_64-pc-linux-gnu / 4.7.3 / python --enable-languages = c , c ++ --enable-морально застарілий --enable-secureplt - відключити werror --with-system-zlib --enable-nls - без включеного-gettext --enable-check = реліз --with-bugurl = https : //bugs.gentoo.org/ --with-pkgversion = 'Gentoo 4.7.3-r1 p1.4, pie-0.5.5'--enable-libstdcxx-time --enable-shared --enable-thread = posix --enable -__ cxa_atexit --enable-clocale = gnu --enable-multilib --with-multilib-list = m32, m64 - відключити -altivec - відключити-фіксовану точку --enable-target = all --disable-libgcj --enable-libgomp --disable-libmudflap --disable-libssp --disable-libquadmath --enable-lto --without- cloog - без-ppl Модель нитки: posix gcc версія 4.7.3 (Gentoo 4.7.3-r1 p1.4, pie-0.5.5) COLLECT_GCC_OPTIONS = '- v' '-mtune = generic' '-march = x86-64' /usr/libexec/gcc/x86_64-pc-linux-gnu/4.7.3/cc1 -quiet -v 1.c -quiet -dumpbase 1.c -mtune = generic -march = x86-64 -auxbase 1 -version - o /tmp/cc830JX6.s GNU C (Gentoo 4.7.3-r1 p1.4, pie-0.5.5) версія 4.7.3 (x86_64-pc-linux-gnu) складено GNU C версії 4.7.3, GMP версії 5.1.2, MPFR версії 3.1.2, MPC версії 1.0.1 Евристика GGC: --param ggc-min-extension = 100 --param ggc-min-hepsize = 131072 ігнорування неіснуючої каталогу "/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/include" #include "..." пошук починається тут: Пошук тут #include починається: /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include / usr / local / включають /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include-fixed / usr / включати Кінець списку пошуку. GNU C (Gentoo 4.7.3-r1 p1.4, pie-0.5.5) версія 4.7.3 (x86_64-pc-linux-gnu) складено GNU C версії 4.7.3, GMP версії 5.1.2, MPFR версії 3.1.2, MPC версії 1.0.1 Евристика GGC: --param ggc-min-extension = 100 --param ggc-min-hepsize = 131072 Виконана контрольна сума компілятора: d486e53a9a5b8aa6182027c91a2ba0e6 COLLECT_GCC_OPTIONS = '- v' '-mtune = generic' '-march = x86-64' /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/as -v --64 -o / tmp / ccl4EIq9.o /tmp/cc830JX6.s Версія асемблера GNU версії 2.23.2 (x86_64-pc-linux-gnu) з використанням версії BFD (білети GNU) COMPILER_PATH = / usr / libexec / gcc / x86_64-pc-linux-gnu / 4.7.3 /: / usr / libexec / gcc / x86_64-pc-linux-gnu / 4.7.3 /: / usr / libexec / gcc / x86_64 -pc-linux-gnu /: / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 /: / usr / lib / gcc / x86_64-pc-linux-gnu /: / usr / lib / gcc /x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/ LIBRARY_PATH = / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 /: / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 /../../../ ../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../ .. /../../x86_64-pc-linux-gnu/lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../:/lib/ : / usr / lib / COLLECT_GCC_OPTIONS = '- v' '-mtune = generic' '-march = x86-64' /usr/libexec/gcc/x86_64-pc-linux-gnu/4.7.3/collect2 --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 / usr /lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/4.7 .3 /../../../../ lib64 / crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/crtbegin.o -L / usr / lib / gcc /x86_64-pc-linux-gnu/4.7.3 -L / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 /../../../../ lib64 -L / lib /../lib64 -L / usr / lib /../ lib64 -L / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 /../../../../ x86_64 -pc-linux-gnu / lib -L / usr / lib / gcc / x86_64-pc-linux-gnu / 4.7.3 /../../ .. /tmp/ccl4EIq9.o - потрібні -lncurses -lgcc - потрібен -lgcc_s --no-as-need -lc -lgcc - потрібен -lgcc_s --no-as-need /usr/lib/gcc/x86_64-pc-linux-gnu/4.7 .3 / crtend.o /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/crtn.o /tmp/ccl4EIq9.o: У функції `main ': 1.c :(. Text + 0xa): невизначене посилання на `tgetent ' collection2: помилка: ld повернув 1 статус виходу
У чому може бути проблема?
1
Я перегляну ваш лінкер та його параметри / налаштування / конфігурацію за замовчуванням. gcc - це дійсно контролер, який запускає компілятор (cc) і linker (ld) по порядку. Він передає параметри -W на лінкер. Ви можете спробувати компілювати з gcc, але потім зв’язавши вручну, щоб перевірити це, запропонуйте 'ld --trace --verbose - потрібні -lcurcurses 1.o -o 1' (після 'gcc 1.c -o 1 o ') Розміщення' -lcurcurses 'у cmdline МОЖЕ вплинути на успіх, див. ld man pages на -l варіант та розташування в рядкових ефектах.
—
lornix
Ну, я перекопав далі, і виявилося, що пакет ncurses зрештою був складений по-різному в двох системах. Дурний мене. У системі з проблемою було використовувати прапор tinfo, необхідний для nvi, і він розміщує ці символи в libtinfo.
—
aikipooh
Дурний ведмідь! ………
—
lornix