0

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

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

4

2 回答 2

2

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

有些人设法做出肮脏的伎俩,从 Linux 上的 64 位代码调用 32 位库(例如 ndiswrapper ...)。细节应该很丑。

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

于 2011-11-29T22:43:40.400 回答
0

通过在 Makefile 的开头添加 OPTFLAGS 并在第 24 行添加 $(CXXFLAGS),我能够在 Mac OS X 和库上将 echoprint-codegen 构建为 32 位可执行文件。-arch i386我使用 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 \

我在这里作为要点存储。

于 2011-11-30T02:10:54.717 回答