共发现:文件是专为i386的是不是架构被链接(x86_64的)(WordNet: file was

2019-10-20 01:49发布

运行make试图编译共发现3.0时,我得到了以下错误:

gcc -m64  -g -O2   -o wishwn  wishwn-tkAppInit.o wishwn-stubs.o -L../lib -lWN -    F/Library/Frameworks -framework Tk -F/Library/Frameworks -framework Tcl -lpthread -framework CoreFoundation -framework Cocoa -framework Carbon -framework IOKit  -lz  -lpthread -framework CoreFoundation  
ld: warning: ignoring file /Library/Frameworks/Tk.framework/Tk, file was built for i386 which is     not the architecture being linked (x86_64): /Library/Frameworks/Tk.framework/Tk
Undefined symbols for architecture x86_64:
  "_Tk_Init", referenced from:
  _Tcl_AppInit in wishwn-tkAppInit.o
  "_Tk_MainEx", referenced from:
  _main in wishwn-tkAppInit.o
  "_Tk_SafeInit", referenced from:
  _Tcl_AppInit in wishwn-tkAppInit.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [wishwn] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

我正在通过ActiveTcl安装的Tcl 8.6。

有任何想法吗?

Answer 1:

每个可执行必须(在所有正常情况下)来构建为单个的架构,例如,用于只是i386 (32位Intel-ISH)或x86_64 (64位Intel-ISH),因为虽然可以有一个单一的CPU支持多种架构,它们之间的切换是一个正式的上下文切换,因此仅在OS内核和你的代码之间进行。 (一些平台 - 尤其是OSX - 都支持多架构的二进制文件 - “胖”的二进制文件 - 过去,但是这非常像具有单元结构,而你不应该这样做了。)这又意味着链接中,是否共享库与否库, 必须匹配您正在为架构。

不幸的是,你要实际使用的库都建立了不同的架构:在ActiveState公司建立你想对看起来像联系起来它是i386 ,但你要做出一个64位版本。 这是行不通的。

最简单的方法可能是获得Tcl和Tk的来源和需要的配置打造他们。 这是我在OSX做的,这很容易。 抓住从源头上SourceForge上正式发布位置 。 要建立的Tcl的OSX,运行:

cd tcl8.6.1/unix
./configure --prefix=/where/you/will/install --enable-64bit
make
make test
sudo make install

你可能会传递--enable-framework配置(但我没有),你可能会忽略的make test ,你可能不需要使用sudomake install (这取决于你在哪里安装到)。

传统知识,你这样做:

cd tk8.6.1/unix
./configure --prefix=/where/you/will/install --enable-64bit --enable-aqua
make
sudo make install

可能需要通过--with-tcl=/location/of/tclConfig.sh (其中这就是tclConfig.sh您刚才上面安装),但构建脚本发现它会自动,如果你已经把Tk的来源旁边Tcl的来源。 有一个测试套件TK,但它远远超过Tcl的一个更深入的(因为它有弹出窗口,盗取的焦点,抢鼠标指针,诸如此类的事情,它是一个GUI工具,所以你应该想到的是排序,这意味着我可以完全理解你没有运行单元测试的东西)。



Answer 2:

请确保您有i386和x86_64的为您的lib中生成设置你的架构中列出。 同时设定构建有源体系只有被明确为No.



文章来源: WordNet: file was built for i386 which is not the architecture being linked (x86_64)
标签: tcl tk wordnet