XcodeのC++でechoprintAPIを使用しながら、OpenFrameworksプロジェクトをビルドしようとしています。OpenFrameworksはi386に組み込まれている必要がありますが、echoprintはx86_64に組み込まれています。
32ビットプロジェクトから64ビット静的ライブラリを参照することは可能ですか?もしそうなら、Xcode 4内でこれを行うにはどうすればよいですか?
XcodeのC++でechoprintAPIを使用しながら、OpenFrameworksプロジェクトをビルドしようとしています。OpenFrameworksはi386に組み込まれている必要がありますが、echoprintはx86_64に組み込まれています。
32ビットプロジェクトから64ビット静的ライブラリを参照することは可能ですか?もしそうなら、Xcode 4内でこれを行うにはどうすればよいですか?
x86(32ビット)とx86-64(64ビット)では命令とレジスタのセットが異なるため、おそらく(少なくともLinuxでは)不可能です。
一部の人々は、Linux上の64ビットコードから32ビットライブラリを呼び出すためになんとか汚いトリックを作ることができました(例:ndiswrapper ...)。詳細は非常に醜いはずです。
32ビットソフトウェアを64ビットソフトウェアとは異なるプロセスにし、それらの間でいくつかのIPC機構を使用することをお勧めします。
-arch i386Makefile の先頭に OPTFLAGS を追加し、24 行目に $(CXXFLAGS) を追加することで、Mac OS X およびライブラリで 32 ビット実行可能ファイルとして echoprint-codegen をビルドできました。ユニバーサル バリアントを使用して 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 \
ここに要点として保存しました。