我正在遵循本指南,但是当我尝试构建 C++ 库时,出现以下致命错误。
\n../../../../gcc-11.1.0/libsanitizer/asan/asan_linux.cpp: In function \xe2\x80\x98void __asan::AsanCheckIncompatibleRT()\xe2\x80\x99:\n../../../../gcc-11.1.0/libsanitizer/asan/asan_linux.cpp:199:21: error: \xe2\x80\x98PATH_MAX\xe2\x80\x99 was not declared in this scope\n 199 | char filename[PATH_MAX];\n | ^~~~~~~~\n../../../../gcc-11.1.0/libsanitizer/asan/asan_linux.cpp:200:35: error: \xe2\x80\x98filename\xe2\x80\x99 was not declared in this scope; did you mean \xe2\x80\x98rename\xe2\x80\x99?\n 200 | MemoryMappedSegment segment(filename, sizeof(filename));\n | ^~~~~~~~\n | \nRun Code Online (Sandbox Code Playgroud)\n 我正在尝试编写一个 CMAKE 文件来编译此处找到的代码。
我当前的 CMAKE 文件如下所示,并且已成功编译并链接了之前的教程。它也编译了这个,但在链接时出现以下错误:
undefined reference to `gst_video_overlay_get_type'
undefined reference to `gst_video_overlay_set_window_handle'
Run Code Online (Sandbox Code Playgroud)
CMAKE 文件如下所示:
cmake_minimum_required(VERSION 3.18)
project(gstreamer)
set(CMAKE_CXX_STANDARD 20)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
pkg_search_module(GST REQUIRED gstreamer-1.0>=1.4
gstreamer-sdp-1.0>=1.4
gstreamer-app-1.0>=1.4
gstreamer-video-1.0>=1.4
)
add_executable(gstreamer main.cpp)
target_include_directories(gstreamer PRIVATE ${GTK3_INCLUDE_DIRS} ${GST_INCLUDE_DIRS})
target_link_libraries(gstreamer ${GTK3_LIBRARIES} ${GST_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
其他 SO 帖子建议了gstreamer-video-1.0我相信我所在的链接:
target_link_libraries(gstreamer ${GST_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
如果我误解了 PkgConfig 的工作原理,我非常感谢您的解释。
谢谢
我一直在研究标准算法,并注意到您可以指定执行策略。
此处的文档列出了 4 项政策:
std::execution::sequenced_policy
std::execution::parallel_policy
std::execution::parallel_unsequenced_policy
std::execution::unsequenced_policy
Run Code Online (Sandbox Code Playgroud)
我了解并行策略和有序策略之间的区别,但我不确定为什么您还需要未排序和未排序的并行?
据我所知,无论如何您都无法保证线程执行顺序,所以这不会使并行和并行未排序策略相同吗?
如果您不能并行化策略自动回退到顺序策略,为什么要添加正常的未排序策略?
我错过了什么?
我一直在玩编译器优化和编译器资源管理器,并注意到 g++ 9.3(本地测试)中的以下缺点。该问题似乎在 g++ 10.1(在编译器资源管理器上测试)中仍然存在。我正在使用
请注意以下代码:
#include <iostream>
#include <iomanip>
constexpr auto fib( auto x )
{
if( x == 0 )
return 0;
else if( x == 1 )
return 1;
else
return fib( x - 1 ) + fib( x - 2 );
}
int main( int argc, char * argv[] )
{
std::cerr << std::setprecision(10) << fib( 47.l );
}
Run Code Online (Sandbox Code Playgroud)
编译器资源管理器链接在这里。
我知道如果我放了 47,模板参数推导会推导出 function int foo( int x ),但是即使我传递一个 long double 文字,这种情况仍然存在。
这会导致溢出。
为什么编译器不能在编译时推断出我的返回类型应该是双精度型?我会期望,因为 …