Я использую Mac. У меня есть библиотека, написанная на C ++, давайте назовем ее «wibble» вместе с ее исходным кодом. Я могу скомпилировать этот исходный код с помощью GCC 4.3 из macports (g++-mp-4.3
) и связать полученную библиотеку с другими компонентами, если я использую GCC 4.3.
Однако мне нужно связать это с другим приложением (назовем это «blort»), которое будет загружать только библиотеки, скомпилированные с GCC 4.2, который поставляется в комплекте с OS X 10.6 (потому что это то, что было it построено с)
Я могу, более или менее, связываться с виблом Makefile
, как мне угодно, но blort - фиксированная цель. Я могу написать любой код или создать сценарий, чтобы склеить их вместе, которые мне могут понадобиться. Кажется, нет никакого способа заставить wibble скомпилироваться на 4.2 (исключая переписывание, о котором не может быть и речи), и парень, который написал это, подтверждает это.
Я не очень хорошо знаком со всем процессом сборки и компоновки в C ++, поскольку мне только передали эту интеграцию, и я полностью озадачен. Что я пытаюсь достичь, даже возможно? Если да, то как?
В случае, если это имеет значение, я пытаюсь вызвать методы в wibble из Perl через Inline :: CPP , но я готов написать необработанный XS, если потребуется (я , что раньше, по крайней мере). Мне нужно использовать системный Perl, чтобы его можно было легко собирать и устанавливать на чужие машины. : - /
ОБНОВЛЕНИЕ, 2012-03-01, 1
Я изучаю компиляцию protobufs с использованием компилятора Mac и выясняю, могу ли я получить компиляцию с тем же компилятором, использующим эту сборку protobufs. Я опубликую результаты в ближайшее время.
Hrmph те же ошибки:
g++ -Wall -Wno-unused-function -Wno-long-long -pedantic -O3 -I/Users/sscaffid/local/include -L/Users/sscaffid/local/lib -fPIC -std=c++98 -c wire.pb.cc
In file included from /Users/sscaffid/local/include/google/protobuf/wire_format_lite_inl.h:43,
from wire.pb.cc:10:
/Users/sscaffid/local/include/google/protobuf/wire_format_lite.h:94: error: comma at end of enumerator list
/Users/sscaffid/local/include/google/protobuf/wire_format_lite.h:117: error: comma at end of enumerator list
/Users/sscaffid/local/include/google/protobuf/wire_format_lite.h:132: error: comma at end of enumerator list
In file included from wire.pb.cc:10:
/Users/sscaffid/local/include/google/protobuf/wire_format_lite_inl.h:303: error: extra ‘;’
/Users/sscaffid/local/include/google/protobuf/wire_format_lite_inl.h:304: error: extra ‘;’
/Users/sscaffid/local/include/google/protobuf/wire_format_lite_inl.h:305: error: extra ‘;’
/Users/sscaffid/local/include/google/protobuf/wire_format_lite_inl.h:306: error: extra ‘;’
/Users/sscaffid/local/include/google/protobuf/wire_format_lite_inl.h:307: error: extra ‘;’
/Users/sscaffid/local/include/google/protobuf/wire_format_lite_inl.h:308: error: extra ‘;’
In file included from wire.pb.cc:11:
/Users/sscaffid/local/include/google/protobuf/descriptor.h:322: error: comma at end of enumerator list
/Users/sscaffid/local/include/google/protobuf/descriptor.h:341: error: comma at end of enumerator list
/Users/sscaffid/local/include/google/protobuf/descriptor.h:352: error: comma at end of enumerator list
/Users/sscaffid/local/include/google/protobuf/descriptor.h:1206: error: extra ‘;’
/Users/sscaffid/local/include/google/protobuf/descriptor.h:1223: error: extra ‘;’
/Users/sscaffid/local/include/google/protobuf/descriptor.h:1243: error: extra ‘;’
/Users/sscaffid/local/include/google/protobuf/descriptor.h:1249: error: extra ‘;’
/Users/sscaffid/local/include/google/protobuf/descriptor.h:1257: error: extra ‘;’
/Users/sscaffid/local/include/google/protobuf/descriptor.h:1264: error: extra ‘;’
/Users/sscaffid/local/include/google/protobuf/descriptor.h:1274: error: extra ‘;’
In file included from wire.pb.cc:13:
/Users/sscaffid/local/include/google/protobuf/wire_format.h:226: error: comma at end of enumerator list
make: *** [wire.pb.o] Error 1