'-l'标志在链接方面没有区别

时间:2017-01-09 10:22:05

标签: c++ compilation g++ static-linking

我一直在编译一些代码,发现-l 标志对链接没有影响。之前没有真正处理过C ++,所以可能是一个简单的错误...

这是我正在使用的命令:

编译:

g++ -c -Wall -std=c++11 -I/usr/include/flycapture -I/usr/include/ -I/usr/local/include/opencv2 -I/usr/include/glibmm-2.4 -I/usr/lib64/glibmm-2.4/include -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include/ -I/usr/include/sigc++-2.0 -I/usr/lib64/sigc++-2.0/include/  -I/usr/include/boost   FrameRateCounter.cpp -o FrameRateCounter.o
g++ -c -Wall -std=c++11 -I/usr/include/flycapture -I/usr/include/ -I/usr/local/include/opencv2 -I/usr/include/glibmm-2.4 -I/usr/lib64/glibmm-2.4/include -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include/ -I/usr/include/sigc++-2.0 -I/usr/lib64/sigc++-2.0/include/  -I/usr/include/boost   SaveVideoClass.cpp -o SaveVideoClass.o
g++ -c -Wall -std=c++11 -I/usr/include/flycapture -I/usr/include/ -I/usr/local/include/opencv2 -I/usr/include/glibmm-2.4 -I/usr/lib64/glibmm-2.4/include -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include/ -I/usr/include/sigc++-2.0 -I/usr/lib64/sigc++-2.0/include/  -I/usr/include/boost   SaveVideo.cpp -o SaveVideo.o

联:

g++ -L/usr/local/lib -L/usr/lib/x86_64-linux-gnu/ -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_videoio -lsigc-2.0 -lglibmm-2.4 -lglib-2.0  -lstdc++ -lncurses -lflycapture   FrameRateCounter.o SaveVideoClass.o SaveVideo.o -o saveVideo

编译工作正常,但是在链接时它给了我很多未定义的引用错误:

FrameRateCounter.o: In function  `FrameRateCounter::FrameRateCounter(unsigned long)':
FrameRateCounter.cpp:(.text+0x48): undefined reference to `Glib::Timer::Timer()'
FrameRateCounter.cpp:(.text+0x58): undefined reference to `Glib::Mutex::Mutex()'
FrameRateCounter.cpp:(.text+0x68): undefined reference to `Glib::Timer::start()'
...
SaveVideoClass.cpp:(.text+0x1512): undefined reference to `cv::VideoWriter::VideoWriter(cv::String const&, int, double, cv::Size_<int>, bool)'
SaveVideoClass.cpp:(.text+0x1541): undefined reference to `cv::VideoWriter::~VideoWriter()'
SaveVideoClass.cpp:(.text+0x1565): undefined reference to `cv::VideoWriter::isOpened() const'

...
SaveVideoClass.cpp:(.text+0x2ea): undefined reference to `FlyCapture2::Camera::IsConnected()'
SaveVideoClass.cpp:(.text+0x308): undefined reference to `FlyCapture2::Camera::Disconnect()'
SaveVideoClass.cpp:(.text+0x30d): undefined reference to `FlyCapture2::Error::operator!=(FlyCapture2::ErrorType const&) const'

然后,我删除了所有-l 标志,它给了我完全相同的错误消息。这就是为什么我认为这些标志没有生效的原因。但为什么呢?

这是pkg-config的一些输出,如果它有帮助:

pkg-config --libs opencv

-L/usr/local/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn -lopencv_dpm -lopencv_fuzzy -lopencv_line_descriptor -lopencv_optflow -lopencv_plot -lopencv_reg -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_rgbd -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_face -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_xobjdetect -lopencv_objdetect -lopencv_ml -lopencv_xphoto -lippicv -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_photo -lopencv_imgproc -lopencv_core

pkg-config --libs glib-2.0:

-lglib-2.0

pkg-config --libs glibmm-2.4:

-lglibmm-2.4 -lgobject-2.0 -lglib-2.0 -lsigc-2.0

如果有人想查看源代码,请参阅link

更新

订单似乎不是问题。在对象之前给出了库,因此它们应该可用于FrameRateCounter.oSaveVideoClass.oSaveVideo.o

0 个答案:

没有答案
相关问题