gpt4 book ai didi

c++ - 使用 boost 库构建失败

转载 作者:行者123 更新时间:2023-11-30 04:56:23 24 4
gpt4 key购买 nike

我现在阅读了很多关于此的问题,但我似乎无法链接 boost 库。这是我要运行的代码:

#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 的输出 --冗长 | grep SEARCH_DIR.


我会这样更改您的 makefile:

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} $<

关于c++ - 使用 boost 库构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52536333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com