我在Ubuntu 11.10上编译我的C ++和OpenSSL项目时遇到了严重的问题。 编译命令是:
g++ -Wall -lssl -lm -lcrypto -I ./src ./src/server.cpp -o ./bin/server
我收到这些错误:
server.cpp:(.text+0x8ff): undefined reference to `RSA_new'
server.cpp:(.text+0x92d): undefined reference to `PEM_read_RSAPrivateKey'
server.cpp:(.text+0xa85): undefined reference to `RSA_size'
server.cpp:(.text+0xaa1): undefined reference to `RSA_size'
server.cpp:(.text+0xae7): undefined reference to `RSA_private_decrypt'
server.cpp:(.text+0xd84): undefined reference to `BF_set_key'
server.cpp:(.text+0xf1d): undefined reference to `BF_ecb_encrypt'
server.cpp:(.text+0x13c6): undefined reference to `BF_ecb_encrypt'
collect2: ld returned 1 exit status
make: *** [server] Error 1
我成功安装了 openssl 和 libssl-dev ,但问题仍然存在。 我尝试使用内核3.0在Linux Mint 12上编译项目,我遇到了同样的问题。 在我使用内核2.6的旧Linux操作系统上,项目编译并运行良好(使用相同的Makefile和相同的源代码)。 请帮帮我!
答案 0 :(得分:8)
通常,您需要在引用它们的代码后面加上-l
个链接标志。尝试
g++ -Wall -I ./src ./src/server.cpp -o ./bin/server -lssl -lm -lcrypto
答案 1 :(得分:2)
作为对this answer状态的注释,链接器仅查找未定义的符号以按列出参数的顺序包含。
也就是说,如果您的cpp文件使用这些库,则必须在cpp文件之后列出库。
答案 2 :(得分:0)
这些错误来自crypto库,检查ssl和crypto库是否在/ usr / lib中可用,或者如果没有安装它们你在哪里安装它们并且你在编译命令中设置libssl和libcrypto的库搜索路径? / p>