我正在尝试链接以下代码
#include "date/tz.h"
#include <chrono>
#include <iostream>
int
main()
{
using namespace date;
//using namespace std;
//using namespace chrono;
auto tz = locate_zone("America/New_York");
return 0;
}
我正在使用以下编译行
g++ -fsigned-char -g -O0 -std=c++17 -I/home/user1/date-master_debug/include -I/home/user1/date-master_debug -m64 -Wfatal-errors -c hh_is_dst.cc -o hh_is_dst.o
g++ -g -O0 -std=c++17 -I/home/user1/date-master_debug/include -m64 -Wfatal-errors -o hh_is_dst hh_is_dst.o -Wl,-Bdynamic -ldl -Wl,-Bstatic -L/home/user1/date-master_debug/build -ldate-tz -Wl,-Bdynamic -lstdc++ -lgcc -lgcc_eh -Wl,-Bdynamic -lm -lcrypt -lc -lrt -lpthread
出现以下错误
hh_is_dst.o: In function `main': /home/user1/hh_is_dst.cc:12: undefined reference to date::locate_zone(std::basic_string_view<char, std::char_traits<char> >)'
collect2: error: ld returned 1 exit status
知道为什么需要上述定义吗?还是我错过了什么?
我刚刚使用以下命令编译了日期时间库
CXX=g++ CC=gcc CXXFLAGS='-g -O0 -fexceptions -std=c++17' /home/user1/utilities/cmake-3.21.1-linux-x86_64/bin/cmake --debug-trycompile --debug-output -DENABLE_DATE_TESTING=ON -DBUILD_TZ_LIB=ON -DMANUAL_TZ_DB=ON -DUSE_TZ_DB_IN_DOT=ON ../
CXX=g++ CC=gcc CXXFLAGS='-g -O0 -fexceptions -std=c++17' /home/user1/utilities/cmake-3.21.1-linux-x86_64/bin/cmake --build . --target testit --verbose
创建库时有一个测试用例失败。
使用以下环境
cat /etc/redhat-release
红帽企业 Linux 版本 8.10 (Ootpa)
gcc --版本
gcc(GCC)8.5.0 20210514(红帽8.5.0-22)
g++ --版本
g++ (GCC) 8.5.0 20210514(红帽 8.5.0-22)
实际上,当我尝试在应用程序中添加代码时出现错误。这是我可以重现的最小示例。
无论出于何种原因,您都没有链接到 tz.cpp(其中定义了
date::locate_zone
)。 恕我直言,最简单的事情不是不使用 CMake 构建系统,而是编译并链接到 tz.cpp。
我建议遵循此处的构建说明:https://howardhinnant.github.io/date/tz.html#Installation
无论您使用什么配置标志,您都需要对文件(包括 tz.h)和 tz.cpp 使用相同的配置标志。