在Ubuntu 11.10上编译C++和OpenSSL

Compile C++ and OpenSSL on Ubuntu 11.10

本文关键字:C++ OpenSSL 编译 Ubuntu      更新时间:2023-10-16

我在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

我成功安装了openssllibssl-dev,但问题仍然存在。我试图在Linux Mint 12上用3.0内核编译这个项目,但我也遇到了同样的问题。在我的旧Linux操作系统2.6内核上,该项目编译并运行良好(使用相同的Makefile和相同的源代码)。请帮帮我!

通常,您需要在引用-l链接标志的代码后面有这些链接标志。尝试

g++ -Wall  -I ./src ./src/server.cpp -o ./bin/server -lssl -lm -lcrypto

正如这个答案的注释所说,链接器只查找未定义的符号,以包括在参数的列出顺序中。

也就是说,如果您的cpp文件使用库,则库必须列在cpp文件之后。

这些错误来自加密库,请检查ssl和加密库是否在/usr/lib中可用,或者如果没有安装它们,请检查是否在您安装的位置可用,并让您在编译命令中设置libssl和libcrypto的库搜索路径?