使用提升库构建失败
Building with boost libraries fails
我现在读了很多关于这个问题的问题,但我似乎无法链接提升库。这是我尝试运行的代码:
#include <iostream>
#include <ctime>
#include <vector>
#include <stdio.h>
#include <string>
#include <sstream>
#define BOOST_FILESYSTEM_VERSION 3
#define BOOST_FILESYSTEM_NO_DEPRECATED
#include <boost/filesystem.hpp>
namespace fs = ::boost::filesystem;
void getFilesInDir(const fs::path& root, const string& ext, vector<fs::path>& ret)
{
if(!fs::exists(root) || !fs::is_directory(root)) return;
fs::directory_iterator it(root);
fs::directory_iterator endit;
while(it != endit)
{
if(fs::is_regular_file(*it) && it->path().extension() == ext) ret.push_back(it->path().filename());
++it;
}
}
尝试构建会导致许多错误,如下所示:
make all
g++ -lm -g -Wall -std=c++11 -pthread -L/usr/lib/x86_64-linux-gnu/ -lboost_filesystem -lboost_system main.cpp -o main.out $(pkg-config opencv --cflags --libs)
/tmp/ccubp4VK.o: In function `getFilesInDir(boost::filesystem::path const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<boost::filesystem::path, std::allocator<boost::filesystem::path> >&)':
/home/nettef/workspace/project//main.cpp:26: undefined reference to `boost::filesystem::path::extension() const'
/home/nettef/workspace/project//main.cpp:26: undefined reference to `boost::filesystem::path::filename() const'
我三重检查和libboost_system.so
以及libboost_filesystem
都存在于/usr/lib/x86_64-linux-gnu/
中。
这是创建目标:
CXX = g++
CXXFLAGS = -lm -g -Wall -std=c++11 -pthread -L/usr/lib/x86_64-linux-gnu/ -lboost_filesystem -lboost_system
OPENCV_INCLUDES = $$(pkg-config opencv --cflags --libs)
TEST_LIBS = -lcppunit
CURRENT_DIR = $(shell pwd)
all:
$(CXX) $(CXXFLAGS) main.cpp -o main.out $(OPENCV_INCLUDES)
您以错误的顺序指定了链接器输入。main.cpp
必须在它需要的库之前:
g++ -o main.out -Wall -std=c++11 -g main.cpp -lm -pthread -L/usr/lib/x86_64-linux-gnu/ -lboost_filesystem -lboost_system $(pkg-config opencv --cflags --libs)
您可能不需要-L/usr/lib/x86_64-linux-gnu/
因为它在标准链接器搜索路径中,请参阅ld --verbose | grep SEARCH_DIR
的输出。
我会以这种方式更改您的制作文件:
CXX := g++
CXXFLAGS := -pthread -g -Wall -Wextra -std=c++11
LDFLAGS := -pthread -g
LDLIBS := -lm -lboost_filesystem -lboost_system
CPPFLAGS :=
OPENCV_INCLUDES := $(shell pkg-config opencv --cflags)
OPENCV_LDLIBS := $(shell pkg-config opencv --libs)
CURRENT_DIR = $(shell pwd)
all: main.out
.PHONY : all
main.out : LDLIBS += ${OPENCV_LDLIBS} -lcppunit
main.out : main.o
$(CXX) -o $@ $(LDFLAGS) $^ ${LDLIBS}
main.o : CPPFLAGS += ${OPENCV_INCLUDES}
main.o : main.cpp
${CXX} -c -o $@ ${CPPFLAGS} ${CXXFLAGS} $<
相关文章:
- docker 构建失败:无法设置环境变量
- 构建失败错误:无法使用 qibuild 构建C++ SDK Helloworld
- 使用提升库构建失败
- Vcpkg Pango CMake 构建失败缺少头文件
- 调试模板时出现问题.专门针对 Linux GCC 7、GCC 6、GCC 5、GCC 4.9 错误构建失败:模板参数 1
- CUDA opencv 构建失败 - 缺少实际存在的文件
- Xcode OSX上的C++构建失败,出现多个错误文件IO..不可用:在macOS 10.15中引入
- 使用 QT 执行二进制构建失败
- 基于CMAKE的CUDA应用程序的构建失败 - 没有传递给链接器的文件
- 在我的 cpp 或头文件中找不到错误,类构建失败
- 节点构建失败。无法在包含目录的子目录中找到库头文件
- dlib构建失败,无法导入dlib
- 实施 SystemC TLM 测试平台构建失败
- GTKMM-3.0:使用PKG-Config的程序构建失败的MSYS2 NetBeans
- C 如何停止对象构建失败的执行
- OPENCV UWP构建失败
- cocos2d-x android构建失败
- dlib示例,测试构建失败
- 在Xcode上使用I/O套件的方法时,构建失败将失败
- 构建失败:重新定义;不同的基本类型和类型名称首次使用"类"出现,现在使用"struct"