Ссылка на 64-битную статическую библиотеку из 32-битного проекта XCode

Я пытаюсь построить проект OpenFrameworks при использовании API echoprint в C++ в XCode. OpenFrameworks должен быть встроен в i386, а echoprint - в x86_64.

Можно ли ссылаться на 64-битную статическую библиотеку из 32-битного проекта? Если так, как я делаю это в Xcode 4?

2 ответа

Вероятно, это невозможно (по крайней мере, в Linux), потому что наборы команд и регистров различаются для x86 (32 бита) и x86-64 (64 бита).

Некоторым людям удавалось делать грязные трюки для вызова 32-битных библиотек из 64-битного кода в Linux (.eg ndiswrapper ...). Детали должны быть очень некрасивыми.

Я бы посоветовал сделать ваше 32-битное программное обеспечение отличным от 64-битного и использовать некоторые механизмы IPC между ними.

Я смог построить echoprint-codegen как 32-битный исполняемый файл на Mac OS X и библиотеку, добавив -arch i386 к OPTFLAGS в начале Makefile и добавлению $(CXXFLAGS) в строку 24. Я использую 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 \

который я хранил здесь как суть.

Другие вопросы по тегам