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


19

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

./configure

それから

make

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

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

ウェブを検索すると、の場所に問題があるようです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

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

更新:

これらを追加した後

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

私は約、他のエラーを取得していますmakeinfoされていない存在、である私のシステムで。これらの手順ではエラーに到達できません。
gertvdijk

回答:


13

これはランチパッドで報告されたバグであり、回避策があります:

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ファイル(またはコンソールから実行)で十分です。

THX。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

その問題は解決されました。ただし、新しいエラーが発生します。元の投稿
-mahmood

2
ありがとう、しかしそれは2番目の問題の解決策ではなかった。gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html./configure --disable-multilibに従ってゼロから再構築する必要があることがわかりました。ご協力ありがとうございます
-mahmood

Ubuntu 16.04と私のビルドでは動作しません。
ニクラス

私は同じ問題に直面していますがmake install、最終ステップとして実行しています。LIBRARY_PATHを設定しましたが、役に立ちませんでした!! すべてのヘルプは大歓迎
faizan

1
私は問題を抱えていたことを使用した後、「LIBRARY_PATH`にすべきではない現在のディレクトリには、以前に空LIBRARY_PATHによって引き起こさしたがって、使用しています。export LIBRARY_PATH="/usr/lib/x86_64-linux-gnu${LIBRARY_PATH+:$LIBRARY_PATH}"(あなたはそれが空であることがわかっている場合)、またはexport LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
Flamefire

1

私の場合Ubuntu 16.04、私はまったく持っていませんcrti.o

$ find /usr/ -name crti*

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

sudo apt-get install libc6-dev

0

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


デフォルトではyes。ただし、。/ configureのオプション--with-multilib-list = m64を使用すると、ビルドを64ビットのみに制限できます。GCC 4.8.5をビルドしたときにうまくいきました。stackoverflow.com/a/55703805/4807875の回答(パート3)でも言及しました。
アレクサンダーサモイロフ

0

また、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ビットを使用しています


1
古いgcc / g ++を使用するには、Ubuntuを忘れる必要があります。これは、Ubuntuの新しいバージョンでは問題を完全に修正できず、古いUbuntuはサポートされなくなったためです。rehdatベースのシステムを使用する必要があります。
Centos
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.