从32位Xcode项目引用64位静态库

时间:2011-11-29 22:40:17

标签: c++ xcode openframeworks audio-fingerprinting

我正在尝试在Xcode中使用C ++中的echoprint API构建OpenFrameworks项目。 OpenFrameworks需要在i386中构建,但echoprint构建在x86_64中。

是否可以从32位项目引用64位静态库?如果是这样,我如何在Xcode 4中执行此操作?

2 个答案:

答案 0 :(得分:2)

这可能是不可能的(至少不是在Linux上),因为指令&寄存器集在x86(32位)和x86-64(64位)上是不同的。

有些人设法在Linux上使用64位代码调用32位库(例如,ndiswrapper ...)。细节应该非常难看。

我建议你的32位软件与64位软件不同,并在它们之间使用一些IPC机制。

答案 1 :(得分:0)

我能够在Mac OS X和库上将echoprint-codegen构建为32位可执行文件,方法是在Makefile开头的OPTFLAGS中添加-arch i386并在第24行添加$(CXXFLAGS)。我使用MacPorts,我确实需要确保使用通用变体构建taglib。

我写了一个补丁:

diff --git a/src/Makefile b/src/Makefile
index 630efb4..1c9b821 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2,8 +2,8 @@ UNAME := $(shell uname -s)
 CXX=g++
 CC=gcc
 #OPTFLAGS=-g -O0
-OPTFLAGS=-O3 -DBOOST_UBLAS_NDEBUG -DNDEBUG
-CXXFLAGS=-Wall -I/usr/local/include/boost-1_35 `taglib-config --cflags` -fPIC $(OPTFLAGS)
+OPTFLAGS=-O3 -DBOOST_UBLAS_NDEBUG -DNDEBUG -arch i386
+CXXFLAGS=-Wall -I/usr/local/include/boost-1_35 `taglib-config --cflags` -fPIC $(OPTFLAGS)
 CFLAGS=-Wall -fPIC $(OPTFLAGS)
 LDFLAGS=`taglib-config --libs` -lz -lpthread $(OPTFLAGS)

@@ -21,7 +21,7 @@ MODULES = $(MODULES_LIB) Metadata.o
 all: libcodegen echoprint-codegen

 libcodegen: $(MODULES_LIB)
-   $(CXX) -shared -fPIC -o libcodegen.so $(MODULES_LIB) -lz
+   $(CXX) $(CXXFLAGS) -shared -fPIC -o libcodegen.so $(MODULES_LIB) -lz
 ifeq ($(UNAME),Darwin)
    libtool -dynamic -flat_namespace -install_name libcodegen.4.1.1.dylib -lSystem -compatibility_version 4.1 -macosx_version_min 10.6 \
         -current_version 4.1.1 -o libcodegen.4.1.1.dylib -undefined suppress \

我将其存储为gist here