运行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。
有任何想法吗?
每个可执行必须(在所有正常情况下)来构建为单个的架构,例如,用于只是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
,你可能不需要使用sudo
用make 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工具,所以你应该想到的是排序,这意味着我可以完全理解你没有运行单元测试的东西)。
请确保您有i386和x86_64的为您的lib中生成设置你的架构中列出。 同时设定构建有源体系只有被明确为No.
文章来源: WordNet: file was built for i386 which is not the architecture being linked (x86_64)