RSS

x86 g++ のソースを x64 g++ でコンパイル

30 6月

x86 版 Ubuntu でビルドできた Shared Object (so ファイル) を生成する C++ ソース を x64 版でコンパイルしなおしたらエラーが出ました。エラーの内容は大きく分けて次の2点。

error: ‘sleep’ was not declared in this scope
関数はsleepだけではなく、他にもたくさんありました。これは、unistd.h がソースに含まれていないと出るようです。unistd.h を単純に追加したら解決。

/tmp/cc9bT00P.o: error adding symbols: Bad value
これはコンパイルスイッチに -fPIC を追加する必要があるようです。次のような親切なメッセージが表示されました。(笑)

/usr/bin/ld: /tmp/cc9bT00P.o: relocation R_X86_64_32S against `.data’ can not be used when making a shared object; recompile with -fPIC

 
コメントする

投稿者: : 2016/06/30 投稿先 C, 未分類

 

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。