2012-04-16 10 views
1

[OK]を、私たちが持っているもの:LinuxとMacOSXの(ヒョウ)で問題なくコンパイルおよび実行Cで書かれたMacOSXは、Cおよび組み込みLUA

プログラム。 今日、私はluaコードを埋め込んでいます。 Linux:ソースからコンパイルされたlua 5.1。すべてが問題なくコンパイルされます。 Macos:同じlua 5.1パッケージをコンパイルしました。

--luaとリンクしています。

は、コンパイルを開始し、エラーを得た:

CCは= GCC-4.0は作る

ld: warning: in /usr/local/lib/liblua.a, file is not of required architecture

はまた再インストール、完全な除去とMacPortsのからのインストールを試してみました。同じ。

だからこそ修正がありますか?

+0

'_Lua_Call'は、Lua C APIのシンボルではありません。 – lhf

+0

MacOSでの主な問題、ld:warning:/usr/local/lib/liblua.aファイルがコンパイルされていて、必要なアーキテクチャではありません – TotallyStuck

+2

ダウンロードしたソースからLuaをコンパイルしてインストールした場合http://www.lua.orgこれは起こるべきではありません。 – lhf

答えて

0

エラー"file is not of required architecture"は、アーキテクチャを混在させようとしていることを示しています。

/usr/local/lib/liblua.aのアーキテクチャをチェックして、構築しようとしているアーキテクチャまたはオブジェクトと一致することを確認してください。

など。

我々はi386のオブジェクトがあります。私たちはx86_64のオブジェクトは(Mac OS Xのデフォルトのアーキテクチャ)のコンパイル時にそれを使用しようと

==== cat fun.c ==== 
#include <stdio.h> 
void fun() 
{ 
    printf("%s", "foobar\n"); 
} 
gcc -arch i386 -c fun.c -o fun.o 

を:

===== cat test.c == 
extern void fun(); 
int main() 
{ 
    fun(); 
} 

を我々が得る:

$ gcc test.c fun.o 
ld: warning: ignoring file fun.o, file was built for i386 which is not the architecture being linked (x86_64) 
Undefined symbols for architecture x86_64: 
    "_fun", referenced from: 
     _main in ccXVCQhG.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 
+0

私はあなたが正しいと思います。しかし、どのように私はliblua.aのアーチを変えることができますか?ソースからコンパイルするにはどうすればいいですか?私はすでにそれを試したと思います – TotallyStuck

+1

liblua.aを再コンパイルするか、liblua.aのアーキテクチャに一致するプログラムを再コンパイルします。 – diciu

+0

それをしました。今私が持っている:未定義のシンボル:とld:シンボルが見つかりません – TotallyStuck