c++ - BOOST 链接错误未定义对 `boost::system::system_category()' 的引用
问题描述
构建 Boost 1.75.0 并且无法链接我的应用程序。我使用了相同的场景/构建,它适用于 Boost 1.67.0 。我看过很多类似的帖子,但没有答案。
main.o 在 libs 之前, boost_system 是 boost 列表中的最后一个 boost 库。
任何帮助表示赞赏。
CentOS 8, g++ (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5)
我的构建是:
./bootstrap.sh
./b2 -a --threading=multi --link=static
链接错误:
g++ -DWINUX -pthread -g -O3 -Wall -DNDEBUG -o ../bin/TestApp main.o -L../lib -
L/usr/local/src/boost_1_75_0/stage/lib -Wl,-Bstatic -lboost_date_time -lboost_filesystem -
lboost_thread -lboost_system -Wl,-Bdynamic -lpthread
main.o: In function `boost::asio::detail::scheduler::shutdown()':
/usr/local/include/boost/system/error_code.hpp:461: undefined reference to
`boost::system::system_category()'
主.cpp:
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/asio.hpp>
typedef boost::shared_ptr<boost::asio::io_service> asioPtr_t;
int main(int argc, char* argv[])
{
asioPtr_t io_ = asioPtr_t(new boost::asio::io_service());
std::cout << "Test App: " << __DATE__ << std::endl;
}
生成文件:
ifeq ($(strip $(BOOST_HDRDIR)),)
$(error PLEASE SET BOOST_HDRDIR)
endif
ifeq ($(strip $(BOOST_LIBDIR)),)
$(error PLEASE SET BOOST_LIBDIR)
endif
APP = TestApp
SRCS = $(wildcard *.cpp)
OBJS = $(SRCS:.cpp=.o)
COMPILER = g++
CFLAGS = -DWINUX -pthread -g -O3 -Wall -DNDEBUG
COMPILE = $(COMPILER) $(CFLAGS)
INCLDIRS = -I../ -I$(BOOST_HDRDIR)
LIBDIRS = -L../lib -L$(BOOST_LIBDIR)
LIBS = -Wl,-Bstatic -lboost_date_time -lboost_filesystem \
-lboost_thread -lboost_system \
-Wl,-Bdynamic -lpthread
%.o: %.cpp
$(COMPILE) -c $< $(INCLDIRS) -o $@
$(APP): $(OBJS)
@echo "Linking $(APP)..."
mkdir -p ../bin
$(COMPILE) -o ../bin/$(APP) $(OBJS) $(LIBDIRS) $(LIBS)
test:
$(MAKE) -C UnitTest test
clean:
rm -f $(APP) $(OBJS)
解决方案
我能够通过将 -DBOOST_ERROR_CODE_HEADER_ONLY 添加到 Makefile 中的编译选项 (CFLAGS) 来解决我的问题。这个 stackoverflow 问题有助于找到我的解决方案:
编译时对 boost::system::system_category() 的未定义引用。
但是,上述解决方案掩盖了后来在使用 boost_filesystem 时出现的实际问题。我的环境变量 BOOST_HDRDIR 设置如下:
BOOST_HDRDIR=/usr/local/src/boost_1_75_0/boost
实际上应该是什么时候
BOOST_HDRDIR=/usr/local/src/boost_1_75_0
推荐阅读
- c# - 使用 JWT 身份验证调用 REST API 检索数据失败
- apache-kafka - 卡夫卡 SASL_PLAINTEXT SCRAM-SHA-256
- rate - 误分类率
- html - 按钮内的自定义数字
- eclipse - 在 Eclipse 中输入 TFS(Team Foundation Server)URL 时设备登录页面未出现
- javascript - 使用 Javascript 命令或 Selenium 加快浏览器的时间传递
- javascript - 为什么 react 组件没有从 redux 返回当前数据?
- c# - 编译器如何处理隐藏在 c# 中的方法?
- git - 提交更改会从存储库中删除文件
- ios - 如何确定图像的 1x 大小?