将libboost库链接到RHEL上编译sslsniff时出现问题

将libboost库链接到RHEL上编译sslsniff时出现问题,boost,linker,boost-thread,rhel,rhel5,Boost,Linker,Boost Thread,Rhel,Rhel5,正在尝试在RHEL 5.2系统上构建sslsniff。在RHEL上编译sslsniff时,我在使用libboost软件包(来自rpmforge等存储库)和从源代码编译libboost时遇到了相同的错误(这似乎是成功的)。我也在一个新系统上尝试了这一点(以前没有安装libboost等) 还有更多,但我想有一个帖子长度限制 它们中的大多数似乎与boost::system有关,因此我在linker命令中添加了-lboost\u system,并进一步: # g++ -ggdb -g -O2 -lssl

正在尝试在RHEL 5.2系统上构建
sslsniff
。在RHEL上编译
sslsniff
时,我在使用
libboost
软件包(来自rpmforge等存储库)和从源代码编译
libboost
时遇到了相同的错误(这似乎是成功的)。我也在一个新系统上尝试了这一点(以前没有安装
libboost
等)

还有更多,但我想有一个帖子长度限制

它们中的大多数似乎与
boost::system
有关,因此我在linker命令中添加了
-lboost\u system
,并进一步:

# g++ -ggdb -g -O2 -lssl -lboost_filesystem -lpthread -lboost_thread -llog4cpp  -o sslsniff SSLConnectionManager.o FirefoxUpdater.o Logger.o SessionCache.o SSLBridge.o HTTPSBridge.o sslsniff.o FingerprintManager.o AuthorityCertificateManager.o TargetedCertificateManager.o CertificateManager.o HttpBridge.o HttpConnectionManager.o HttpHeaders.o UpdateManager.o OCSPDenier.o FirefoxAddonUpdater.o -lboost_system
SSLConnectionManager.o: In function `thread<boost::_bi::bind_t<void, boost::_mfi::mf3<void, SSLConnectionManager, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::asio::ip::basic_endpoint<boost::asio::ip::tcp>, bool>, boost::_bi::list4<boost::_bi::value<SSLConnectionManager*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::_bi::value<boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> >, boost::_bi::value<bool> > > >':
/usr/local/include/boost/thread/detail/thread.hpp:191: undefined reference to `boost::thread::start_thread()'
SSLConnectionManager.o: In function `~thread_data':
/usr/local/include/boost/thread/detail/thread.hpp:40: undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/usr/local/include/boost/thread/detail/thread.hpp:40: undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/usr/local/include/boost/thread/detail/thread.hpp:40: undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/usr/local/include/boost/thread/detail/thread.hpp:40: undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
#g++-ggdb-g-O2-lssl-lboost\u文件系统-lpthread-lboost\u线程-llog4cpp-o sslsniff SSLConnectionManager.o FirefoxUpdater.o Logger.o SessionCache.o SSLBridge.o HTTPSBridge.o sslsniff.o指纹管理器.o AuthorityCertificateManager.o targetedCertificaterager.o HttpBridge.o HttpConnectionManager.oHttpHeaders.o UpdateManager.o OCSPDenier.o FirefoxAddonUpdater.o-lboost\u系统
SSLConnectionManager.o:在函数“thread”中:
/usr/local/include/boost/thread/detail/thread.hpp:191:boost::thread::start_thread()的未定义引用
SSLConnectionManager.o:在函数`~thread\u data'中:
/usr/local/include/boost/thread/detail/thread.hpp:40:boost::detail::thread\u data\u base::~thread\u data\u base()的未定义引用
/usr/local/include/boost/thread/detail/thread.hpp:40:boost::detail::thread\u data\u base::~thread\u data\u base()的未定义引用
/usr/local/include/boost/thread/detail/thread.hpp:40:boost::detail::thread\u data\u base::~thread\u data\u base()的未定义引用
/usr/local/include/boost/thread/detail/thread.hpp:40:boost::detail::thread\u data\u base::~thread\u data\u base()的未定义引用
现在错误与
boost::detail
boost::filesystem::detail
有关

我试过使用Boost1.35和1.42(最新版本)

在我自己的Ubuntu系统上,我安装了Ubuntu存储库中的库,并且我能够很好地编译+link sslsniff


提前感谢。

看起来系统已经安装了boost1.33
yum-erase-boost
解决了以下问题:

---> Package boost.i386 0:1.33.1-10.el5 set to be erased
---> Package boost.x86_64 0:1.33.1-10.el5 set to be erased
---> Package boost-devel.i386 0:1.33.1-10.el5 set to be erased
---> Package boost-devel.x86_64 0:1.33.1-10.el5 set to be erased
去重建并确保它使用1.35。。有些是非标准名称(可能是因为现有的1.33?),所以我添加了链接

# make
g++ -ggdb -g -O2 -lssl -lboost_filesystem -lpthread -lboost_thread -llog4cpp  -o sslsniff SSLConnectionManager.o FirefoxUpdater.o Logger.o SessionCache.o SSLBridge.o HTTPSBridge.o sslsniff.o FingerprintManager.o AuthorityCertificateManager.o TargetedCertificateManager.o CertificateManager.o HttpBridge.o HttpConnectionManager.o HttpHeaders.o UpdateManager.o OCSPDenier.o FirefoxAddonUpdater.o  
/usr/bin/ld: cannot find -lboost_filesystem
collect2: ld returned 1 exit status
make: *** [sslsniff] Error 1
# cd /usr/lib
# ln -s libboost_filesystem-gcc41-mt-1_35.so libboost_filesystem.so
# ln -s libboost_thread-gcc41-mt-1_35.so libboost_thread.so
# cd ~/sslsniff-0.6
# make
g++ -ggdb -g -O2 -lssl -lboost_filesystem -lpthread -lboost_thread -llog4cpp  -o sslsniff SSLConnectionManager.o FirefoxUpdater.o Logger.o SessionCache.o SSLBridge.o HTTPSBridge.o sslsniff.o FingerprintManager.o AuthorityCertificateManager.o TargetedCertificateManager.o CertificateManager.o HttpBridge.o HttpConnectionManager.o HttpHeaders.o UpdateManager.o OCSPDenier.o FirefoxAddonUpdater.o 
#
但是,当我尝试运行它时,会出现(非boost!)库加载错误:

# ./sslsniff 
./sslsniff: error while loading shared libraries: liblog4cpp.so.4: cannot open shared object file: No such file or directory
当我安装
liblog4cpp
I/之后,它没有运行
ldconfig
来更新ld库缓存。我自己做了,而且成功了:

# ldconfig
# ./sslsniff 
Usage: ./sslsniff [options]

Modes:
-a  Authority mode.  Specify a certificate that will act as a CA.
-t  Targeted mode.  Specify a directory full of certificates to target.

Required Options:
-c <file|directory> File containing CA cert/key (authority mode) or 
            directory containing a collection of certs/keys
            (targeted mode)
-s <port>       Port to listen on for SSL interception.
-w <file>       File to log to

Optional Options:
-u <updateLocation> Loction of any Firefox XML update files.
-m <certificateChain>   Location of any intermediary certificates.
-h <port>       Port to listen on for HTTP interception (required for
            fingerprinting).
-f <ff,ie,safari,opera> Only intercept requests from the specified browser(s).
-d          Deny OCSP requests for our certificates.
-p          Only log HTTP POSTs
-e <url>        Intercept Mozilla Addon Updates
-j <sha256>     The sha256sum value of the addon to inject
#ldconfig
#/sslsniff
用法:./sslsniff[选项]
模式:
-权威模式。指定将用作CA的证书。
-t目标模式。为目标指定一个充满证书的目录。
所需选项:
-包含CA证书/密钥的c文件(授权模式)或
包含证书/密钥集合的目录
(目标模式)
-s用于侦听SSL侦听的端口。
-w要登录到的文件
可选选项:
-任何Firefox XML更新文件的位置。
-m任何中介机构证书的位置。
-用于侦听HTTP侦听的h端口(用于
指纹识别)。
-f仅截获来自指定浏览器的请求。
-d拒绝OCSP对我们证书的请求。
-p仅记录HTTP帖子
-e拦截Mozilla插件更新
-j要注入的插件的sha256sum值

看起来系统已经安装了boost1.33
yum-erase-boost
解决了以下问题:

---> Package boost.i386 0:1.33.1-10.el5 set to be erased
---> Package boost.x86_64 0:1.33.1-10.el5 set to be erased
---> Package boost-devel.i386 0:1.33.1-10.el5 set to be erased
---> Package boost-devel.x86_64 0:1.33.1-10.el5 set to be erased
去重建并确保它使用1.35。。有些是非标准名称(可能是因为现有的1.33?),所以我添加了链接

# make
g++ -ggdb -g -O2 -lssl -lboost_filesystem -lpthread -lboost_thread -llog4cpp  -o sslsniff SSLConnectionManager.o FirefoxUpdater.o Logger.o SessionCache.o SSLBridge.o HTTPSBridge.o sslsniff.o FingerprintManager.o AuthorityCertificateManager.o TargetedCertificateManager.o CertificateManager.o HttpBridge.o HttpConnectionManager.o HttpHeaders.o UpdateManager.o OCSPDenier.o FirefoxAddonUpdater.o  
/usr/bin/ld: cannot find -lboost_filesystem
collect2: ld returned 1 exit status
make: *** [sslsniff] Error 1
# cd /usr/lib
# ln -s libboost_filesystem-gcc41-mt-1_35.so libboost_filesystem.so
# ln -s libboost_thread-gcc41-mt-1_35.so libboost_thread.so
# cd ~/sslsniff-0.6
# make
g++ -ggdb -g -O2 -lssl -lboost_filesystem -lpthread -lboost_thread -llog4cpp  -o sslsniff SSLConnectionManager.o FirefoxUpdater.o Logger.o SessionCache.o SSLBridge.o HTTPSBridge.o sslsniff.o FingerprintManager.o AuthorityCertificateManager.o TargetedCertificateManager.o CertificateManager.o HttpBridge.o HttpConnectionManager.o HttpHeaders.o UpdateManager.o OCSPDenier.o FirefoxAddonUpdater.o 
#
但是,当我尝试运行它时,会出现(非boost!)库加载错误:

# ./sslsniff 
./sslsniff: error while loading shared libraries: liblog4cpp.so.4: cannot open shared object file: No such file or directory
当我安装
liblog4cpp
I/之后,它没有运行
ldconfig
来更新ld库缓存。我自己做了,而且成功了:

# ldconfig
# ./sslsniff 
Usage: ./sslsniff [options]

Modes:
-a  Authority mode.  Specify a certificate that will act as a CA.
-t  Targeted mode.  Specify a directory full of certificates to target.

Required Options:
-c <file|directory> File containing CA cert/key (authority mode) or 
            directory containing a collection of certs/keys
            (targeted mode)
-s <port>       Port to listen on for SSL interception.
-w <file>       File to log to

Optional Options:
-u <updateLocation> Loction of any Firefox XML update files.
-m <certificateChain>   Location of any intermediary certificates.
-h <port>       Port to listen on for HTTP interception (required for
            fingerprinting).
-f <ff,ie,safari,opera> Only intercept requests from the specified browser(s).
-d          Deny OCSP requests for our certificates.
-p          Only log HTTP POSTs
-e <url>        Intercept Mozilla Addon Updates
-j <sha256>     The sha256sum value of the addon to inject
#ldconfig
#/sslsniff
用法:./sslsniff[选项]
模式:
-权威模式。指定将用作CA的证书。
-t目标模式。为目标指定一个充满证书的目录。
所需选项:
-包含CA证书/密钥的c文件(授权模式)或
包含证书/密钥集合的目录
(目标模式)
-s用于侦听SSL侦听的端口。
-w要登录到的文件
可选选项:
-任何Firefox XML更新文件的位置。
-m任何中介机构证书的位置。
-用于侦听HTTP侦听的h端口(用于
指纹识别)。
-f仅截获来自指定浏览器的请求。
-d拒绝OCSP对我们证书的请求。
-p仅记录HTTP帖子
-e拦截Mozilla插件更新
-j要注入的插件的sha256sum值