2016-01-27 4 views
1

Я использую библиотеку proxygen по facebook для создания простого примера клиента. в директории у меня есть два объектных файлов, как связать их: Я использую:Как связывается сделано в C++?

g++ -std=c++11 -o my_echo CurlClientMain.o CurlClient.o -lproxygenhttpserver -lfolly -lglog -lgflags -pthread 

я думаю, я ма отсутствует некоторый флаг компоновщика как -lgflags в приведенном выше примере. возможно, после включения некоторого -momeflag поможет выполнить компиляцию. как узнать, какие все возможные флаги библиотек являются похожими на тот, который они использовали -lproxyhttpserver.

Короче, где все эти библиотеки определены или расположены. Я использую ubuntu.

Вот мое сообщение об ошибке

In function `main': 
/home/kshitij/proxygen/httpclient/samples/curl/CurlClientMain.cpp:91: undefined reference to `proxygen::HTTPConnector::HTTPConnector(proxygen::HTTPConnector::Callback*, folly::HHWheelTimer*)' 
/home/kshitij/proxygen/httpclient/samples/curl/CurlClientMain.cpp:102: undefined reference to `proxygen::HTTPConnector::connect(folly::EventBase*, folly::SocketAddress const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, std::map<folly::AsyncSocket::OptionKey, int, std::less<folly::AsyncSocket::OptionKey>, std::allocator<std::pair<folly::AsyncSocket::OptionKey const, int> > > const&, folly::SocketAddress const&)' 
/home/kshitij/proxygen/httpclient/samples/curl/CurlClientMain.cpp:91: undefined reference to `proxygen::HTTPConnector::~HTTPConnector()' 
/home/kshitij/proxygen/httpclient/samples/curl/CurlClientMain.cpp:99: undefined reference to `proxygen::HTTPConnector::connectSSL(folly::EventBase*, folly::SocketAddress const&, std::shared_ptr<folly::SSLContext> const&, ssl_session_st*, std::chrono::duration<long, std::ratio<1l, 1000l> >, std::map<folly::AsyncSocket::OptionKey, int, std::less<folly::AsyncSocket::OptionKey>, std::allocator<std::pair<folly::AsyncSocket::OptionKey const, int> > > const&, folly::SocketAddress const&, std::string const&)' 
/home/kshitij/proxygen/httpclient/samples/curl/CurlClientMain.cpp:91: undefined reference to `proxygen::HTTPConnector::~HTTPConnector()' 
CurlClient.o: In function `CurlService::CurlClient::connectSuccess(proxygen::HTTPUpstreamSession*)': 
/home/kshitij/proxygen/httpclient/samples/curl/CurlClient.cpp:69: undefined reference to `proxygen::HTTPUpstreamSession::newTransaction(proxygen::HTTPTransactionHandler*)' 
collect2: error: ld returned 1 exit status 
[email protected]:~/proxygen/httpclient/samples/curl$ g++ -std=c++11 -o my_echo CurlClientMain.o CurlClient.o -lproxygenhttpserver -lfolly -lglog -lgflags -pthread 
CurlClientMain.o: In function `main': 
/home/kshitij/proxygen/httpclient/samples/curl/CurlClientMain.cpp:91: undefined reference to `proxygen::HTTPConnector::HTTPConnector(proxygen::HTTPConnector::Callback*, folly::HHWheelTimer*)' 
/home/kshitij/proxygen/httpclient/samples/curl/CurlClientMain.cpp:102: undefined reference to `proxygen::HTTPConnector::connect(folly::EventBase*, folly::SocketAddress const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, std::map<folly::AsyncSocket::OptionKey, int, std::less<folly::AsyncSocket::OptionKey>, std::allocator<std::pair<folly::AsyncSocket::OptionKey const, int> > > const&, folly::SocketAddress const&)' 
/home/kshitij/proxygen/httpclient/samples/curl/CurlClientMain.cpp:91: undefined reference to `proxygen::HTTPConnector::~HTTPConnector()' 
/home/kshitij/proxygen/httpclient/samples/curl/CurlClientMain.cpp:99: undefined reference to `proxygen::HTTPConnector::connectSSL(folly::EventBase*, folly::SocketAddress const&, std::shared_ptr<folly::SSLContext> const&, ssl_session_st*, std::chrono::duration<long, std::ratio<1l, 1000l> >, std::map<folly::AsyncSocket::OptionKey, int, std::less<folly::AsyncSocket::OptionKey>, std::allocator<std::pair<folly::AsyncSocket::OptionKey const, int> > > const&, folly::SocketAddress const&, std::string const&)' 
/home/kshitij/proxygen/httpclient/samples/curl/CurlClientMain.cpp:91: undefined reference to `proxygen::HTTPConnector::~HTTPConnector()' 
CurlClient.o: In function `CurlService::CurlClient::connectSuccess(proxygen::HTTPUpstreamSession*)': 
/home/kshitij/proxygen/httpclient/samples/curl/CurlClient.cpp:69: undefined reference to `proxygen::HTTPUpstreamSession::newTransaction(proxygen::HTTPTransactionHandler*)' 
collect2: error: ld returned 1 exit status 
+1

Каковы точные сообщения об ошибках? –

+0

@ πάνταῥεῖ неопределенные ошибки refrence ...: я редактирую вопрос с сообщением об ошибке –

+0

'-lsomething' является просто сокращением для поиска' libsomething.a'/'.so' в настроенных путей библиотеки (обычно по умолчанию это '/ lib''/usr/lib' плюс некоторые другие вещи, там есть многократная поддержка); вы можете найти установленные библиотеки, находящиеся в этих каталогах. –

ответ

2

как я знаю, что все possilble библиотеки флаги posiible, как тот, который они использовали -lproxyhttpserver.

Это зависит от вашей среды компиляции.

Вы используете GNU-компилятор в Linux. Существует инструмент, чтобы вывести список всех установленных совместно используемых библиотек:

ldconfig -p 

Вы получите список строк, как этот

libpthread.so.0 (libc6,x86-64, OS ABI: Linux 2.6.32) => /lib/x86_64-linux-gnu/libpthread.so.0 

Удалите lib префикс и расширение .so.X и вы получите имя библиотеки , В этом случае это pthread. Для связи с libray используйте опцию -lNAME. Итак, -lpthread в этом примере.

Короче где все эти ЛИЭС определены или расположенные

Правая часть => полный путь к библиотеке.

+0

Просто nitpicking, но 'lib' на самом деле является префиксом в этом случае :) –

Смежные вопросы