有人可以帮我解决这个问题吗?
您可以采取一些措施来简化此操作。
首先,打开GNUmake http://sourceforge.net/p/cryptopp/code/HEAD/tree/trunk/c5/GNUmakefile并添加fPIC
第 1 行:
CXXFLAGS = -DNDEBUG -g -O2 -fPIC
二、开放GNUmake http://sourceforge.net/p/cryptopp/code/HEAD/tree/trunk/c5/GNUmakefile并掉落“版本”来自第 18 行的 Clang 检测逻辑:
CLANG_COMPILER = $(shell $(CXX) --version 2>&1 | $(EGREP) -i -c "clang")
三、开放GNUmake http://sourceforge.net/p/cryptopp/code/HEAD/tree/trunk/c5/GNUmakefile并掉落气体检查从第 38 行附近的达尔文标志周围开始。您希望达尔文检查单独存在,而不需要ifeq ($(GAS219_OR_LATER),0)
check.
ifeq ($(UNAME),Darwin)
CXXFLAGS += -arch x86_64 -arch i386
else
CXXFLAGS += -march=native
endif
四、开放GNUmake http://sourceforge.net/p/cryptopp/code/HEAD/tree/trunk/c5/GNUmakefile并在第 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)手册页 http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/dyld.1.html);它默默地掉落-Wl,rpath
;它默默地掉落-Bstatic
;并且它总是链接到共享对象(如果可用)。即使在 iOS 上,它也会链接到动态库,这是禁止的!
在 OS X 上,您应该完全指定静态存档,而不是使用-l
and -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++ 修改了适用于 OS X 和移动设备的 makefile http://pastebin.com/d7G6PcEX.
EDIT(2015 年 6 月):Crypto++ 正在从来源锻造 https://sourceforge.net/projects/cryptopp/ to GitHub https://github.com/weidai11/cryptopp。上面讨论的大部分更改已合并到 makefile 中。