私はDebianのパッケージングプロセスでいくつかのセキュリティ機能を短絡する必要があります。最初の反応が「セキュリティ機能を無効にしないでください」と「新しいgccでコンパイルするようにプログラムを更新する」ことを知っている理由をここで説明します。古いgcc:CFLAG調整のDebian/Ubuntuパッケージをビルドしますか?
いくつかのライブラリ(http://pj.freefaculty.org/Swarm)をコンパイルするにはgcc-4.6を使用する必要があります。これは従来のObjective-C APIを提供していたgccの最新バージョンです。その後、gccは従来のヘッダーを削除しました。したがって、従来のObjective-Cを使用した非常に大きなコードベースがあるため、「gccをアップグレードする」は受け入れられません。
Ubuntu 17.04では、gcc-4.6は使用できなくなりましたが、私はUbuntuの古いバージョンを "信頼できる"ものにすることでインストールできます。それは正常に動作します。私はプログラムをコンパイルし、古い形式のmake install
をインストールすることができます。
しかし、Debianパッケージをビルドするときに問題が発生します。 dpkg-buildpackage -rfakeroot
を実行すると、通常はパッケージをビルドするために、Debianパッケージシステムにgcc-4.6で合法でないCFLAGSが挿入されたため、私は失敗しました。特に、コマンドラインには-Wdate-time
と-fstack-protector-strong
が含まれていますが、両方ともgcc-4.6と互換性がありません。
ここにconfig.logがあります。
configure:3878: checking whether the C compiler works
configure:3900: gcc -g -O2 -fdebug-prefix-map=/home/pauljohn/LinuxDownloads/Debian/sources/amd64/swarm-Ubuntu17.04/swarm-2.4.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro conftest.c >&5
cc1: error: unrecognized command line option '-Wdate-time'
cc1: error: unrecognized command line option '-fstack-protector-strong
私はパッケージでdebianディレクトリを検査しましたが、これらのフラグが手動でそこに挿入されていないことがわかりました。私が言うことから、彼らはdpkg-buildpackage
と一緒に来ます。
私がコンパイルしようとしているこのライブラリは、まあ、古いプログラムです。私たちが働いたのは、約15年から20年前のサンタフェ研究所との提携です。この古いコードを新しいObjective-Cインターフェイスを使用するように書き直すのは妥当ではないので、gcc-4.6の制限内で生きることが重要です。
私が受け取った最も有益な提案は、Debian/Ubuntuアーキテクチャを削除し、古いgccがより簡単に許容されるRedHatベースのアーキテクチャに移行することです。実際、RedHat 6では、gcc-4.6はいつもよりもいくぶん先行していますが、RedHat 7にはまだgcc-4.6をインストールできます。私はむしろそれを行うことによって、Ubuntuのユーザーを排除しないだろう。
これをナビゲートする方法に関する他のアイデアは高く評価されます。
ありがとうございました。方法1は意図したとおりに働いた。あなたの助けを借りて、古いSwarmプロジェクトが復活するでしょう。 – pauljohn32