2017-06-26 4 views
1

こんにちは私は例と静的なlibとしてrestbedをコンパイルしたいが、私はリンカエラーがあります。例とスタティックlibをrestbed

使用:Ubuntuの16.04のgcc-5.4私がやったこと

cd dependency/openssl 
./config 

*long text* 

Configured for linux-x86_64. 

*** Because of configuration changes, you MUST do the following before 
*** building: 

     make depend 

ので、私は依存作り、作りました。それはlibcrypto.aとlibssl.aを作った だから私はこの部分は大丈夫だと思いますか?

cd build 
cmake -DBUILD_TESTS=YES -DBUILD_EXAMPLES=YES -DBUILD_SSL=YES -DBUILD_SHARED=NO -DCMAKE_INSTALL_PREFIX=static .. 
    Copyright 2013-2017, Corvusoft Ltd, All Rights Reserved. 
-- Found ASIO include at: /home/jova/git/restbed/dependency/asio/asio/include 
-- Found Kashmir include at: /home/jova/git/restbed/dependency/kashmir 
-- Found OpenSSL library at: /home/jova/git/restbed/dependency/openssl/libssl.a 
-- Found OpenSSL include at: /home/jova/git/restbed/dependency/openssl/include 
-- Found Crypto library at: /home/jova/git/restbed/dependency/openssl/libcrypto.a 
-- Failed to locate PAM, skipping example. 
-- Found Syslog include at: /usr/include 
-- Found Catch include at: /home/jova/git/restbed/dependency/catch/include 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/jova/git/restbed/build-static 
jova:~/git/restbed/build-static$ make -j4 install 
[ 0%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/uri.cpp.o 
[ 0%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/rule.cpp.o 
[ 0%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/string.cpp.o 
[ 1%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/http.cpp.o 
[ 1%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/request.cpp.o 
[ 2%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/service.cpp.o 
[ 2%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/session.cpp.o 
[ 2%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/resource.cpp.o 
[ 2%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/response.cpp.o 
[ 3%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/settings.cpp.o 
[ 3%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/web_socket.cpp.o 
[ 3%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/ssl_settings.cpp.o 
[ 4%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/session_manager.cpp.o 
[ 4%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/detail/http_impl.cpp.o 
[ 4%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/web_socket_message.cpp.o 
[ 5%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/detail/socket_impl.cpp.o 
[ 5%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/detail/service_impl.cpp.o 
[ 5%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/detail/session_impl.cpp.o 
[ 6%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/detail/web_socket_impl.cpp.o 
[ 6%] Building CXX object CMakeFiles/restbed.dir/source/corvusoft/restbed/detail/web_socket_manager_impl.cpp.o 
[ 6%] Linking CXX static library librestbed.a 
[ 6%] Built target restbed 
[ 6%] Building CXX object example/CMakeFiles/https_client_verify_peer.dir/https_client/source/verify_peer.cpp.o 
[ 6%] Building CXX object example/CMakeFiles/web_socket.dir/web_socket/source/example.cpp.o 
[ 7%] Building CXX object example/CMakeFiles/https_service.dir/https_service/source/example.cpp.o 
[ 7%] Building CXX object example/CMakeFiles/signal_handling.dir/signal_handling/source/example.cpp.o 
[ 7%] Linking CXX executable example/signal_handling 
[ 7%] Linking CXX executable example/https_client_verify_peer 
[ 7%] Linking CXX executable example/https_service 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup': 
dso_dlfcn.c:(.text+0x11): undefined reference to `dlopen' 
dso_dlfcn.c:(.text+0x24): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x2f): undefined reference to `dlclose' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func': 
dso_dlfcn.c:(.text+0x334): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x3db): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_var': 
dso_dlfcn.c:(.text+0x454): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x4fb): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load': 
dso_dlfcn.c:(.text+0x569): undefined reference to `dlopen' 
dso_dlfcn.c:(.text+0x5cb): undefined reference to `dlclose' 
dso_dlfcn.c:(.text+0x603): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr': 
dso_dlfcn.c:(.text+0x69f): undefined reference to `dladdr' 
dso_dlfcn.c:(.text+0x709): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_unload': 
dso_dlfcn.c:(.text+0x762): undefined reference to `dlclose' 
collect2: error: ld returned 1 exit status 
example/CMakeFiles/signal_handling.dir/build.make:97: recipe for target 'example/example/signal_handling' failed 
make[2]: *** [example/example/signal_handling] Error 1 
CMakeFiles/Makefile2:297: recipe for target 'example/CMakeFiles/signal_handling.dir/all' failed 
make[1]: *** [example/CMakeFiles/signal_handling.dir/all] Error 2 
make[1]: *** Waiting for unfinished jobs.... 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup': 
dso_dlfcn.c:(.text+0x11): undefined reference to `dlopen' 
dso_dlfcn.c:(.text+0x24): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x2f): undefined reference to `dlclose' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func': 
dso_dlfcn.c:(.text+0x334): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x3db): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_var': 
dso_dlfcn.c:(.text+0x454): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x4fb): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load': 
dso_dlfcn.c:(.text+0x569): undefined reference to `dlopen' 
dso_dlfcn.c:(.text+0x5cb): undefined reference to `dlclose' 
dso_dlfcn.c:(.text+0x603): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr': 
dso_dlfcn.c:(.text+0x69f): undefined reference to `dladdr' 
dso_dlfcn.c:(.text+0x709): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_unload': 
dso_dlfcn.c:(.text+0x762): undefined reference to `dlclose' 
collect2: error: ld returned 1 exit status 
example/CMakeFiles/https_client_verify_peer.dir/build.make:97: recipe for target 'example/example/https_client_verify_peer' failed 
make[2]: *** [example/example/https_client_verify_peer] Error 1 
CMakeFiles/Makefile2:223: recipe for target 'example/CMakeFiles/https_client_verify_peer.dir/all' failed 
make[1]: *** [example/CMakeFiles/https_client_verify_peer.dir/all] Error 2 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup': 
dso_dlfcn.c:(.text+0x11): undefined reference to `dlopen' 
dso_dlfcn.c:(.text+0x24): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x2f): undefined reference to `dlclose' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func': 
dso_dlfcn.c:(.text+0x334): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x3db): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_var': 
dso_dlfcn.c:(.text+0x454): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x4fb): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load': 
dso_dlfcn.c:(.text+0x569): undefined reference to `dlopen' 
dso_dlfcn.c:(.text+0x5cb): undefined reference to `dlclose' 
dso_dlfcn.c:(.text+0x603): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr': 
dso_dlfcn.c:(.text+0x69f): undefined reference to `dladdr' 
dso_dlfcn.c:(.text+0x709): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_unload': 
dso_dlfcn.c:(.text+0x762): undefined reference to `dlclose' 
collect2: error: ld returned 1 exit status 
example/CMakeFiles/https_service.dir/build.make:97: recipe for target 'example/example/https_service' failed 
make[2]: *** [example/example/https_service] Error 1 
CMakeFiles/Makefile2:260: recipe for target 'example/CMakeFiles/https_service.dir/all' failed 
make[1]: *** [example/CMakeFiles/https_service.dir/all] Error 2 
[ 8%] Linking CXX executable example/web_socket 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup': 
dso_dlfcn.c:(.text+0x11): undefined reference to `dlopen' 
dso_dlfcn.c:(.text+0x24): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x2f): undefined reference to `dlclose' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func': 
dso_dlfcn.c:(.text+0x334): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x3db): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_var': 
dso_dlfcn.c:(.text+0x454): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x4fb): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load': 
dso_dlfcn.c:(.text+0x569): undefined reference to `dlopen' 
dso_dlfcn.c:(.text+0x5cb): undefined reference to `dlclose' 
dso_dlfcn.c:(.text+0x603): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr': 
dso_dlfcn.c:(.text+0x69f): undefined reference to `dladdr' 
dso_dlfcn.c:(.text+0x709): undefined reference to `dlerror' 
../../dependency/openssl/libcrypto.a(dso_dlfcn.o): In function `dlfcn_unload': 
dso_dlfcn.c:(.text+0x762): undefined reference to `dlclose' 
collect2: error: ld returned 1 exit status 
example/CMakeFiles/web_socket.dir/build.make:97: recipe for target 'example/example/web_socket' failed 
make[2]: *** [example/example/web_socket] Error 1 
CMakeFiles/Makefile2:186: recipe for target 'example/CMakeFiles/web_socket.dir/all' failed 
make[1]: *** [example/CMakeFiles/web_socket.dir/all] Error 2 
Makefile:138: recipe for target 'all' failed 
make: *** [all] Error 2 

私は問題を解決する方法を知らないので、それはLIBSを検索します。

アップデート:私は今、それが動作

sudo apt-get install libssl-dev 
cmake -DBUILD_TESTS=YES -DBUILD_EXAMPLES=YES -DBUILD_SSL=YES -DCMAKE_INSTALL_PREFIX=static .. 

でSSLと暗号LIBSをインストールしたのですが、私はhttpsをサポートして例をコンパイルしたいとき、私はまだ-lsslと-lcryptoでそれをリンクする必要がありますが、それはありますおそらくSSLと暗号は共有ライブラリであるからです。

g++ -std=c++11 -I/home/jova/git/restbed/build/static/include https_service.cpp -L/home/jova/git/restbed/build/static/library -lrestbed -lssl -lcrypto -pthread 

どのように私は静的ライブラリrestbed.aにsslサポートを取得できますか?または、私はいつもSSLと暗号とリンクする必要がありますか?

私は混乱しています。このオプション-DBUILD_SSL = YES/NOは何をしますか?

+0

BUILD_SSLは、セキュア・ソケット・レイヤーのサポートを可能にします。 – Corvusoft

答えて

0

問題はリンクの問題と思われます。 -ldlを追加してみてください。

dlopen and friends

+0

リンカーフラグを追加する場所/方法を指定できますか? "cmake-DBUILD_TESTS = YES -DBUILD_EXAMPLES = YES -DBUILD_SSL = YES -DBUILD_SHARED = NO .." – rinn2883

+0

さらに詳しく説明すると、「cmake-DBUILD_SSL = YES -DCMAKE_INSTALL_PREFIX = static ..」は動作し、librestbed.aを作成します。しかし、なぜそれは例とテストを有効にしても動作しませんか? – rinn2883

+0

update:sslは静的なlibとしてビルドされています。 "cmake -DBUILD_SSL = YES -DCMAKE_INSTALL_PREFIX = static .."はエラーを出さず、librestbed.aをビルドしますが、私がサンプルをコンパイルしたいときは、まだsslライブラリにリンクする必要があります。私が使用している例はhttps_serviceです。それはrestbedにのみ含まれています。だから私はそれが静的だったのでopensslとリンクする必要があります知っていない必要なコードlibrestbed.aにする必要があります – rinn2883

関連する問題