Bug 38991

Summary: Некорректные пути к libgcc в собираемом приложении
Product: Sisyphus Reporter: Denis Smirnov <mithraen>
Component: libgccjit9-develAssignee: Gleb F-Malinovskiy <glebfm>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: ldv
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Denis Smirnov 2020-09-25 07:15:08 MSK
пример из: https://gcc.gnu.org/onlinedocs/jit/intro/tutorial01.html
собирается, но не работает вываливая ошибки:

/usr/bin/ld.default: cannot find crtbeginS.o: No such file or directory
/usr/bin/ld.default: cannot find -lgcc
/usr/bin/ld.default: cannot find -lgcc_s
libgccjit.so: error: error invoking gcc driver
NULL result

Запуск под strace показывает, что собранный бинарник ищет:
libgcc.so и crtbeginS.o, crtend.o, crtendS.o  где угодно, только не в /usr/lib64/gcc/..., например в /usr/x86_64-alt-linux/lib64

access("../lib64/gcc/x86_64-alt-linux/9.3.1/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("../lib64/gcc/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("../x86_64-alt-linux/lib/x86_64-alt-linux/9.3.1/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("../x86_64-alt-linux/lib/../lib64/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("../lib64/x86_64-alt-linux/9.3.1/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("../lib64/../lib64/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/lib/x86_64-alt-linux/9.3.1/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/lib/../lib64/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/x86_64-alt-linux/9.3.1/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/../lib64/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("../x86_64-alt-linux/lib/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("../lib64/crtbeginS.o", R_OK)    = -1 ENOENT (No such file or directory)
access("/lib/crtbeginS.o", R_OK)        = -1 ENOENT (No such file or directory)
access("/usr/lib/crtbeginS.o", R_OK)    = -1 ENOENT (No such file or directory)

Обращаю внимание во-первых на использование полной версии в некоторых путях (9.3.1, а не 9), и на то, что используемые абсолютные пути имеют мало общего с реальным местположением этих каталогов у нас.

Работающий gccjit нужен для сборки gccemacs.
Comment 1 Denis Smirnov 2023-02-24 10:40:12 MSK
Проверил со свежим gcc -- работает.