有人可以帮我解决这个问题吗?
您可以做一些事情来让这更容易。
首先打开GNUmake并在第一行添加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 flags之后添加以下内容:
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。也就是说,使用以下内容(这是我在 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 中。