OpenSSL 1.0.0-FIPS符号查找错误

时间:2017-01-27 18:48:33

标签: c++ openssl undefined-symbol

我编写了一个使用OpenSSL API的C ++ SSL Socket类。我正在使用的OpenSSL版本是“OpenSSL 1.0.0-fips”,如果这很重要的话。这个类属于我编写的共享库。

我正在尝试编写一个我的类的裸骨单元测试,但我无法分配SSL_CTX结构。

这是我的头文件:

#ifndef __TDLS_SSL_SOCKET_HPP__
#define __TDLS_SSL_SOCKET_HPP__

#include <stdexcept>

#include <openssl/ssl.h>
#include <openssl/x509v3.h>
#include <openssl/err.h>

class TdlsSSLSocket
{
public:
  TdlsSSLSocket(const SSL_METHOD* method);
protected:
  SSL_CTX* ctx;
};

#endif

以下是构造函数的实现:

#include "TdlsSSLSocket.hpp"

TdlsSSLSocket::TdlsSSLSocket(const SSL_METHOD* method)
{
  ctx = SSL_CTX_new(method);
  if(!ctx)
  {
    throw std::runtime_error("Failed to initialize SSL CTX object");
  }
}

以下是我编译此源代码的方法:

g++  -fPIC -g -O2 -Wall  -c -o TdlsSSLSocket.o TdlsSSLSocket.cpp
ld -r TdlsTCPSocket.o TdlsTCPClient.o TdlsTCPServer.o ReferenceCounter.o TdlsSSLSocket.o -o socket.o

以下是我创建共享库的方法:

g++ -shared -Wl,-soname,libttshared.so.2 -lssl -o libttshared.so.2.0 logger/log.o conf/conf_objs.o seq/seq.o socket/socket.o

这是我尝试练习课程的C ++单元测试。

#include <iostream>

#include "TdlsSSLSocket.hpp"

using namespace std;

int main(int argc, char* argv[])
{

  SSL_library_init();
  SSL_load_error_strings();

  TdlsSSLSocket ssl_server(TLSv1_method());

}

我建造它就像这样:

g++ -o TestSSLServer TestSSLServer.o ../../libttshared.so -L../.. -lttshared

当我执行单元测试时,我收到以下错误:

[tlytle@vraptor3 test]$ TestSSLServer
TestSSLServer: symbol lookup error: TestSSLServer: undefined symbol: _ZN13TdlsSSLSocketC1EPK13ssl_method_st

奇怪的未定义符号_ZN13TdlsSSLSocketC1EPK13ssl_method_st几乎看起来像C ++名称错误可能是罪魁祸首。但是,我尝试在extern "C"中包装该类,但我得到了同样的错误。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

对于阅读此内容的任何人来说,问题不在于OpenSSL库。未定义的符号问题意味着链接器无法解析给定的符号。我在单元测试二进制文件TestSSLServer上执行了ldd,它显示我没有链接到当前版本的libttshared.so。我设置了LD_LIBRARY_PATH变量,以包含新共享库的目录和成功执行的程序。