John DeBord
John DeBord

Reputation: 705

What is a fast way to find the necessary libraries to link against when playing around with a library

What's a good way to find the necessary libraries needed to link against when making a toy executable to play around with another library?

I'll get the appropriate compile command from the compile_commands.json file (generated by CMake), but I still have to manually figure out which libraries I need the executable to link to.


For example: if I have a file called main.cpp:

#include <some_cool_library.hpp>
#include <iostream>

int main() {
    some_cool_library::some_cool_type obj{"35"};
    return 0;
}

I'll grab the appropriate compile command from the compile_commands.json file that was generated in the project that utilized some_cool_library.hpp (this is so I can pass the correct -I flag(s) to compiler without having to think at all).

Then I'll compile it (making the appropriate compile command modifications):

/usr/bin/clang++ -DBOOST_ALL_NO_LIB -DBOOST_ASIO_HAS_STD_CHRONO -DHAS_ZLIB -DWEBSOCKETPP_STRICT_MASKING -I<some-dir0> -I<some-dir1> -I<some-dir2> -isystem /usr/local/include  -Wall -Wno-invalid-partial-specialization -O3 -DNDEBUG -pthread -std=gnu++17 -o prog /home/user/main.cpp && ./prog

Lastly I'll get some output that spits back a bunch of linker errors where I have to manually inspect each one and link the appropriate library. Is there a better way to find these libraries?

Upvotes: 0

Views: 120

Answers (1)

JaMiT
JaMiT

Reputation: 16983

The standard way to learn how to use a library is to read that library's documentation.

In some cases, pkg-config can be used to get the necessary compiler and linker flags. This is not guaranteed to work, but there is a reasonable chance of it working if CMake seems to automagically handle the library as a dependency.

Upvotes: 1

Related Questions