使用Crow的時候需要注意crow依賴asio依賴OpenSSL,asio要求1.22以上版本,我使用的是1.26.0;
這個版本的asio要求OpenSSL是1.0.2,其他版本我得機器上編不過,ubuntu上默認帶的OpenSSL是1.1.1;
所以我下載了OPENSSL1.2.0重裝,地址: https://www.openssl.org/source/old/
編譯cpp啟用Crow的SSL時會出現一些問題:
比如:
- 1 undefined reference to `SSL_library_init’
出現這個提示需要在編譯時指定鏈接 crypto 和 ssl 庫
- 2 undefined reference to `dlopen’
出現這個提示需要在編譯時指定鏈接 dl 庫
- 3 undefined reference to `X509_certificate_type’
出現這個提示需要在編譯時指定鏈接openssl的位置;
- 4 以上需要指定的庫和地址都加上之后還是報錯,可能是指令順序問題;
例如
// ×
g++ example_ssl.cpp -L/usr/local/openssl/lib -lssl -ldl -lcrypto -DCROW_ENABLE_SSL=1 -o ssl_example -std=c++11 -lpthread// √
g++ example_ssl.cpp -L/usr/local/openssl/lib -lssl -lcrypto -DCROW_ENABLE_SSL=1 -o ssl_example -std=c++11 -lpthread -ldl
上面兩行只是調整了 -ldl 所在的位置,就會消除部分錯誤,
具體原因參考
https://qastack.cn/programming/956640/linux-c-error-undefined-reference-to-dlopen
https://stackoverflow.com/questions/11893996/why-does-the-order-of-l-option-in-gcc-matter/11894098#11894098