2011-11-29 86 views
0

我想在Xcode中使用C++中的echoprint API時構建OpenFrameworks項目。 OpenFrameworks需要在i386中構建,但echoprint構建在x86_64中。從32位Xcode項目引用64位靜態庫

是否可以從32位項目引用64位靜態庫?如果是這樣,我如何在Xcode 4中執行此操作?

+0

64位和32位代碼不會在單個進程中混合使用。 –

+1

你有沒有試過問echoprint是否可以在最先進的開發者論壇上構建32位?他們很友善。你在談論echoprint-codegen,對吧? – mkb

回答

2

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

有些人設法使用骯髒的技巧從Linux上的64位代碼調用32位庫(.e.g。ndiswrapper ...)。細節應該很難看。

我建議讓你的32位軟件與64位的軟件不同,並在它們之間使用一些IPC機器。

0

我能夠在Mac OS X和庫上將echoprint-codegen構建爲32位可執行文件,在Makefile開頭添加-arch i386到OPTFLAGS,並在第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 \ 

我已經存儲爲依​​據here