今すぐ解決する必要がある特定の問題がありますが、この種の問題(他の人のコードをコンパイルするときに発生する分割エラー)を解決するための良い戦略を知りたいです。したがって、特定または一般的な種類の答え。
詳細
インストールしようとしています。OpenSSLSynology DS412+の場合、1.0.1g。バージョン湾岸協力協議会鉱山(v4.2.1)は64ビット用にコンパイルされておらず、OpenSSLは次のように文句を言います。
$ ./config --prefix=/opt \
--openssldir=/etc/ssl \
--libdir=lib \
shared \
zlib-dynamic
$ make
せん断!
cryptlib.c:1: sorry, unimplemented: 64-bit mode not compiled in
cryptlib.c: In function 'OPENSSL_ia32cap_loc':
cryptlib.c:677: warning: dereferencing type-punned pointer will break strict-ali
asing rules
make[1]: *** [cryptlib.o] Error 1
だから、GCC 4.8.2をインストールしようとしていますが(今は複数のバージョンを試してみましたが)、毎回失敗するようです良い製造慣行の一部make
。これは頻繁に起こり、GMPをダウンロードしてコンパイルすることにしました。
$ ./configure --prefix=/opt --build=i386-pc-linux-gnu
$ make
./gen-fac 32 0 >fac_table.h || (rm -f fac_table.h; exit 1)
/opt/bin/bash: line 1: 20507 Segmentation fault (core dumped) ./gen-fac 32
0 > fac_table.h
make: *** [fac_table.h] Error 1
私はCプログラマーでも私のコードでもないので、Valgrindを使ってコアをチェックする可能性は低いです。私はライブラリをコンパイルするときにこのような状況に何度もあり、Cを学ぶことは私にとって優先順位ではありません。代替案はありますか?
- Cを学ぶ
- フォーラム/メーリングリストにお問い合わせください。
私がアクセスできる唯一のパッケージマネージャは、完全なGCCよりも少ない機能を提供するipkgです。仮想マシンを設定し、ipkg用のバイナリをビルドしてDS412に配置できますか?以前これをやったことがないので、それがどれほど実現可能であるかはまったくわかりません。
どんな助けや洞察力でも大変感謝いたします。
答え1
欲しいことができないと思います。これらのデバイスタイプのデバイス(Synologyなど)は、単純なバージョンのツール(Bashなど)を使用することがよくあります。これらの単純なバージョンには機能がない可能性があります。これは非標準の場所です/opt/bin/bash
。
https://www.synology.com/en-us/products/overview/DS412%2B
直接ビルドする前に、OpenSSLが直接ビルドするのではなく、単にアップグレードできるバイナリパッケージとして提供されていることを確認するために、そのWebサイトまたはフォーラムを見てみましょう。
答え2
最後の2行は疑わしいです。
$ ./config --prefix=/opt \ --openssldir=/etc/ssl \ --libdir=lib \ shared \ zlib-dynamic
設定されているすべてのオプションは(通常は)で始まります
--
。64ビット - 使用しているディストリビューションは64ビットですか?プロセッサは64ビットですか?カーネルは64ビットデバイスで実行されていますか?しかし、64ビットコードと1 GBのRAMを使用してもあまり利点はありません。いくつかのデータ型とソートのサイズが大きいため、実際にはより多くのメモリを消費します。
間違い
/opt/bin/bash: line 1: 20507 Segmentation fault (core dumped) ./gen-fac 32 0 > fac_table.h
問題のある場所を提案します。ソースコードを見つけて、
gen-fac
デバッガで実行してみてください。ipkg install openssl
最後に、配布パッケージをインストールするために正しい構文を使用できませんか?