質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

Q&A

解決済

1回答

3554閲覧

Djangoでapacheをつかう際のエラー

kazi0321

総合スコア7

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

0グッド

0クリップ

投稿2018/03/23 06:59

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
python3.6.4
Django2.0.3
をvirtualenv環境で動かし、Apacheで公開しようとしています。
pip install mod_wsgiを実行中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

/bin/ld: /usr/local/python/lib/libpython3.6m.a(abstract.o): relocation  R_X86_64_32S against `_Py_NotImplementedStruct' can not be used when making a shared object     ; recompile with -fPIC /usr/local/python/lib/libpython3.6m.a: error adding symbols: Bad value collect2: error: ld returned 1 exit status error: command 'gcc' failed with exit status 1 ---------------------------------------- Command "/root/mon-env/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-cr83otyd/mod-wsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__) ;code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec') )" install --record /tmp/pip-7lf1hr5o-record/install-record.txt --single-version-ex ternally-managed --compile --install-headers /root/mon-env/include/site/python3.6/m od-wsgi" failed with error code 1 in /tmp/pip-build-cr83otyd/mod-wsgi/

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazto

2018/03/23 07:29

mod_wsgiはどこから取得したものでしょうか?
kazi0321

2018/03/24 03:22

どこからというのがちょっと理解出来なくて、うまく回答できるか分かりませんがpipで別のwsgi関連のものをインストールしました
guest

回答1

0

ベストアンサー

/usr/local/python というパスにインストールなさっている辺りから御見受けするに、恐らくは御自身でビルドした Python を御使いでしょうか。であれば、素直に エラーメッセージで "recompile with -fPIC" と言われている通り、次のようにして -fPIC 付きで Python 本体をビルドし直せば良い かと存じます。

bash

1$ CFLAGS="-fPIC" ./configure && make

あるいは、 ほぼ同様のエラーについてドキュメントで言及されています から、これに従って、次のように --enable-shared オプション付きで Python 本体をビルドし直しても良い でしょう。共有ライブラリの生成時は暗黙的に -fPIC が付加されますから、結局は同様にして問題が解消するはずです。何れにせよ、 Python 本体をビルドし直す必要があります。

bash

1$ ./configure --enable-shared && make

因みに、何故このようなエラーが生じるのか? という原因・理由に関しては、実は mod_wsgi の製作者も この記事の中ほど で次の通り、「私も正確な理由を分かっているとは言えないのだが…」と述べている程度には理解に骨の折れる内容です。実際、前掲の mod_wsgi のドキュメントでは「Python 本体が 32 bit でビルドされているのに、 mod_wsgi を 64 bit でビルドしようとしているから」と説明されていますが、私の理解する限り、この理由は誤りです。

I can't say I remember or understand the exact reason, but when 64 bit Linux was introduced, attempting to link a static Python library into a dynamically loadable object would fail at compilation link time.

正しくは この Stack Overflow の回答 で簡潔に説明されている通りで、 共有ライブラリはプロセスのアドレス空間上で任意の位置に配置され得るため、 32 bit 即値をアドレスとしてオペランドに取る命令が non-PIC な (位置独立でない) コードとして含まれていると、たとえ動的リンクでそのオペランドの再配置を行ったとしても、もともと 32 bit 分しかない場所には 64 bit のアドレスが収まり切らず動作できなくなる場合があるから というのが理由だと思われます。もし興味がお有りでしたら、 AMD64 命令のアドレッシングや ELF の動的リンク、再配置等について御調べになると良いのではないでしょうか。

投稿2018/03/26 15:58

argparse

総合スコア1017

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazi0321

2018/03/28 06:45

回答感謝します。上のコマンドを実行してみたのですが、エラーは解消しませんでした。上のコマンドを実行中に Python/compile.c: In function ‘compute_code_flags’: Python/compile.c:5173:16: warning: unused variable ‘n’ [-Wunused-variable] Py_ssize_t n; こういったのが黄色文字でいくつか表示されたのですが関係はあるでしょうか?
kazi0321

2018/03/28 08:14

すいません。もういちど、python消してからやり直してみたらできました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問