2012-04-16 75 views
1

好了,我們有什麼:MACOSX,C和嵌入式LUA

方案C寫的,其編制和沒有在Linux和MacOSX上(豹)的問題上運行。 今天我嵌入了lua代碼。 Linux:從源代碼編譯lua 5.1。一切正常,編譯沒有任何問題。 Macos:編譯了相同的lua 5.1包。

與--llua鏈接。

開始編譯,得到了一個錯誤:

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 2012-04-16 12:21:23

+0

酷,但它的編譯和它的工作,與馬科斯錯誤ld的主要問題:警告:在/usr/local/lib/liblua.a,文件不是所需的體系結構 – TotallyStuck 2012-04-16 13:25:55

+2

如果您已經編譯和安裝從源下載的Lua http://www.lua.org這不應該發生。 – lhf 2012-04-16 13:26:56

回答

0

錯誤"file is not of required architecture"暗示您試圖混合體繫結構。

檢查/usr/local/lib/liblua.a的體系結構並確保它與您嘗試構建的體系結構或對象相匹配。

E.g.

我們有一個i386的對象:

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

如果我們嘗試使用它編譯x86_64的對象(在Mac OS X默認架構)時:

===== 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 2012-04-20 16:17:14

+1

您要麼重新編譯liblua.a,要麼重新編譯與liblua.a的體系結構匹配的程序。 – diciu 2012-04-20 16:21:42

+0

做到了。現在我有:未定義的符號:和ld:符號(s)未找到 – TotallyStuck 2012-04-21 10:49:13