Установка Crypto++ 5.6.2 на Mac OS X

Я пытаюсь установить Crypto++ 5.6.2 на свой Mac. Когда я бегу

make -j4 libcryptopp.a" 

Я получаю следующую ошибку:

libtool: unrecognized option `-static'
libtool: Try `libtool --help' for more information.
make: *** [libcryptopp.a] Error 1

Может кто-нибудь, пожалуйста, помогите мне с этим?


person user1204481    schedule 08.09.2014    source источник
comment
libtool: неизвестная опция... - почему libtool поднимает свою уродливую голову? Crypto++ — это не проект автоинструментов. Вы cd входите в каталог проекта, а затем вводите make static dynamic cryptest.exe. После его завершения вы запускаете cryptest.exe v для запуска набора тестов. Если ошибок нет, то вы устанавливаете его с помощью sudo make install PREFIX=/usr/local/cryptopp/darwin (или любого другого места, которое вы предпочитаете).   -  person jww    schedule 16.09.2014
comment
См. обновление за июнь 2015 г., представленное ниже.   -  person jww    schedule 21.06.2015


Ответы (1)


Может кто-нибудь, пожалуйста, помогите мне с этим?

Есть несколько вещей, которые вы можете сделать, чтобы сделать это проще.

Сначала откройте GNUmake и добавьте fPIC в строку 1:

CXXFLAGS = -DNDEBUG -g -O2 -fPIC

Во-вторых, откройте GNUmake и перетащите "версию " из логики обнаружения Clang в строке 18:

CLANG_COMPILER = $(shell $(CXX) --version 2>&1 | $(EGREP) -i -c "clang")

В-третьих, откройте GNUmake и удалите проверку GAS. вокруг флагов Дарвина вокруг строки 38. Вы хотите, чтобы проверка Дарвина стояла отдельно, без проверки ifeq ($(GAS219_OR_LATER),0).

ifeq ($(UNAME),Darwin)
  CXXFLAGS += -arch x86_64 -arch i386
else
  CXXFLAGS += -march=native
endif

В-четвертых, откройте GNUmake и добавьте следующее после Darwin флаги вокруг строки 45:

ifneq ($(CLANG_COMPILER),0)
  CXXFLAGS += -Wno-tautological-compare -Wno-unused-value
endif

С измененным make-файлом:

# Make the static lib, shared object, and test program
cd cryptopp
make static dynamic cryptest.exe

После завершения make:

# Run the test program
cd cryptopp
./cryptest.exe v

После успешного завершения проверки:

# Install into /usr/local
cd cryptopp
sudo make install PREFIX=/usr/local

OS X может быть настоящим медведем. Это может быть медведь, потому что он молча игнорирует LD_PRELOAD (вместо него используется DYLD_LIBRARY_PATH, см. dyld(3) справочных страниц); он молча роняет -Wl,rpath; он молча роняет -Bstatic; и он всегда ссылается на общий объект, если он доступен. Он будет ссылаться на динамическую библиотеку даже на iOS, где это запрещено!

В OS X вам следует полностью указать статический архив, а не использовать -l и -L. То есть используйте следующее (это из одной из моих тестовых программ, которые я использую в OS X):

g++ -DDEBUG=1 -g3 -O0 -Wall -Wextra -Wno-unused-parameter \
    -I/usr/local/include/cryptopp \
    cryptopp-test.cpp -o cryptopp-test.exe \
    /usr/local/lib/libcryptopp.a

Можно полностью указать libcryptopp.a. Архив — это просто набор объектных файлов, и вы можете указать объектные файлы для компоновки в командной строке.


Вот Pastebin файла GNUmakefile, который я использую: измененный с помощью Crypto++ make-файл для OS X и мобильных устройств.


EDIT (июнь 2015 г.): Crypto++ переходит с Sourceforge на GitHub. Большинство изменений, описанных выше, были включены в make-файл.

person jww    schedule 08.09.2014
comment
После изменения GNUmake я все еще получаю ту же ошибку. Пожалуйста помоги. - person user1204481; 09.09.2014
comment
Перезагрузите библиотеку. Если вы разархивируете его вручную, то используйте unzip -a. - person jww; 09.09.2014
comment
Подробное объяснение параметров make очень полезно. - person Eric Tsui; 20.06.2015