我正在尝试在我的 Mac 上安装 Crypto++ 5.6.2。 当我运行时
make -j4 libcryptopp.a"
我收到以下错误:
libtool: unrecognized option `-static'
libtool: Try `libtool --help' for more information.
make: *** [libcryptopp.a] Error 1
有人可以帮我解决这个问题吗?
最佳答案
Can someone please help me with this?
您可以采取一些措施来简化此操作。
首先,打开GNUmake
并在第 1 行添加 fPIC
:
CXXFLAGS = -DNDEBUG -g -O2 -fPIC
二、打开GNUmake
并从第 18 行的 Clang 检测逻辑中删除“version”:
CLANG_COMPILER = $(shell $(CXX) --version 2>&1 | $(EGREP) -i -c "clang")
三、打开GNUmake
并从第 38 行的 Darwin 标志周围删除 GAS 检查。您希望 Darwin 检查单独存在,而不需要 ifeq ($(GAS219_OR_LATER),0)
检查。
ifeq ($(UNAME),Darwin)
CXXFLAGS += -arch x86_64 -arch i386
else
CXXFLAGS += -march=native
endif
四、打开GNUmake
并在第 45 行左右的 Darwin 标志后面添加以下内容:
ifneq ($(CLANG_COMPILER),0)
CXXFLAGS += -Wno-tautological-compare -Wno-unused-value
endif
调整 makefile 后:
# 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)
man pages );它默默地删除 -Wl,rpath
;它默默地丢弃-Bstatic
;并且它总是链接到共享对象(如果可用)。即使在 iOS 上,它也会链接到动态库,这是禁止的!
在 OS X 上,您应该完全指定静态存档,而不是使用 -l
和 -L
。也就是说,使用以下命令(这是来 self 在 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
就可以了。存档只是目标文件的集合,您可以在命令行上指定用于链接的目标文件。
这是我使用的 GNUmakefile 的 Pastebin:Crypto++ modified makefile for OS X and mobile .
编辑(2015 年 6 月):Crypto++ 正在从 Sourceforge 迁移出去至 GitHub 。上面讨论的大部分更改已合并到 makefile 中。
关于crypto++ - 在 Mac OS X 上安装 Crypto++ 5.6.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25728659/