web-dev-qa-db-ja.com

crti.oが見つかりません:そのようなファイルまたはディレクトリはありません

Gcc 4.1.2を作成したい場合( ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.1.2/gcc-4.1.2.tar。私のubuntu 12.04(x86_64)ではbz2 )。現在アクティブなgccは4.6.2です。やった:

./configure

それから

make

しかし、私はこのエラーを受け取ります

/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status

Webを検索すると、crtiの場所に問題があるようです。これらのファイルはシステムで利用可能です

# find /usr/ -name crti*
/usr/lib32/crti.o
/usr/lib/x86_64-linux-gnu/crti.o
/usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o

Libc6 develパッケージもインストールされます

# dpkg -l | grep libc6
ii  libc6                                  2.15-0ubuntu10.3                          Embedded GNU C Library: Shared libraries
ii  libc6-dbg                              2.15-0ubuntu10.3                        Embedded GNU C Library: detached debugging symbols
ii  libc6-dev                              2.15-0ubuntu10.3                        Embedded GNU C Library: Development Libraries and Header Files
ii  libc6-dev-i386                         2.15-0ubuntu10.3                        Embedded GNU C Library: 32-bit development libraries for AMD64
ii  libc6-i386                             2.15-0ubuntu10.3                        Embedded GNU C Library: 32-bit shared libraries for AMD64
ii  libc6-pic                              2.15-0ubuntu10.3                        Embedded GNU C Library: PIC archive library

どうすれば修正できますか?

UPDATE:

これらを追加した後

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH 

その問題は解決されました。しかし、今私は得る

/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.a when searching for -lc
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-gnu/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-   gnu/crtn.o' is incompatible with i386 output
collect2: ld returned 1 exit status
19
mahmood

これは BUG であり、ランチパッドで報告されていますが、回避策があります:

32ビットプラットフォームで64ビットプログラムをコンパイルする:

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

ネイティブ32ビットの場合:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH

GCCがライブラリの新しい場所を見つけるには、.bashrcファイル(またはコンソールから実行)で十分です。

どうも。 Iain Buclaw(ibuclaw)に正しい方向を指し示します。

12.10 32ビット

hhlp@hhlp:~$ Sudo find /usr/ -name crti*
/usr/lib/i386-linux-gnu/crti.o
hhlp@hhlp:~$ 

LIBRARY_PATH=/usr/lib/i386-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

12.10 64ビット

hhlp@hhlp:~$ Sudo find /usr/ -name crti*
/usr/lib/x86_64-linux-gnu/crti.o
hhlp@hhlp:~$ 

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH
13
hhlp

私の場合はUbuntu 16.04はありませんcrti.oはまったくありません:

$ find /usr/ -name crti*

そこで、開発者パッケージをインストールします。

Sudo apt-get install libc6-dev
1
Eugen Konkov

アップストリームソースからx86-64でGCC 4.8をビルドすると、32ビットと64ビットの両方のライブラリをビルドする必要があるという問題が発生します(multi-libが無効になっていない限り)。その場合、/usr/lib/x86_64-linux-gnu/usr/lib32の両方のパスを追加する必要があります。

0
John Vreeland

また、Ubuntuマシン(4.6.3マシンでは3.4.6)でgccの古いバージョンを構築しています
@ mahmoodの--disable-multilibソリューションを試しましたが、gcc 3.4.6を使用するために必要なパッケージには32ビットライブラリも必要であるように思われました。

したがって、64ビットライブラリと32ビットライブラリの両方をLIBRARY_PATHに追加しました

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib32:$LIBRARY_PATH 
export LIBRARY_PATH 

ああ、Ubuntu 12.04 64ビットを使用しています

0
Heartinpiece