小编Die*_*nte的帖子

链接共享库时限制符号的可见性

某些平台要求您向链接器提供共享库的外部符号列表.但是,在大多数不需要的unixish系统上:默认情况下,所有非静态符号都可用.

我的理解是,GNU工具链可以选择性地将可见性限制为显式声明的符号.如何使用GNU ld实现这一目标?

linker gnu shared-libraries linker-scripts

45
推荐指数
4
解决办法
2万
查看次数

在Linux设备驱动程序中使用浮点的编码约定是什么?

这与 这个问题有关.

我不是Linux设备驱动程序或内核模块的专家,但我一直在阅读Rubini&Corbet的"Linux设备驱动程序"[O'Reilly]以及一些在线资源,但我一直无法找到关于这个具体问题的任何事情.

什么时候内核或驱动程序模块允许使用浮点寄存器?
如果是,谁负责保存和恢复其内容?
(假设x86-64架构)

如果我理解正确的话,每当KM运行时,它就会使用硬件上下文(或硬件线程或寄存器集 - 无论你想调用它),它已被某些应用程序线程抢占.如果用c编写KM,编译器将正确地确保通用寄存器被正确保存和恢复(就像在应用程序中一样),但浮点寄存器不会自动发生.就此而言,许多知识管理员甚至不能假设处理器具有任何浮点功能.

我是否正确地猜测想要使用浮点的KM必须小心保存并恢复浮点状态?这样做有标准的内核函数吗?

这个拼写的编码约定是否在任何地方拼写出来?
它们与SMP-non SMP驱动程序不同吗?
对于较旧的非抢占式内核和较新的抢占式内核,它们是不同的吗?

linux floating-point linux-device-driver fxsave

11
推荐指数
2
解决办法
4465
查看次数

如何在Visual C++控制台应用程序中捕获Control-C异常?

这似乎应该很简单,但我已经尝试了
try {} catch (...) {} C++异常处理和
__try {} __finally {} 结构化异常处理(SEH),
并且没有人会捕获Control-C应用程序时发生的异常.

我真的不希望C++异常处理这样做,因为Control-C是一个系统类型的信号而不是由C++ throw()引起的,但是当SEH不起作用时我还是尝试过它.

如果我在调试器下运行,它会显示Control-C引发第一次机会异常,但是当它被重新抛出时,我的处理程序永远不会被调用.

exception-handling

6
推荐指数
1
解决办法
9487
查看次数

如何解决bazel“未声明的包含”错误?

我是bazel的新手,并且无法使用以下命令构建C ++程序包

错误:/ path / to / package / BUILD:linenumber:1规则'// path / to / package:name'中未声明包含:此规则缺少'path / to / package / source_file.cpp'

...之后是其他目录中的头文件列表。这些文件不是正在生成的程序包的一部分,而是从其他位置拉入的。

我的问题是如何将声明正确添加到BUILD文件中以解决错误?

根据在线Bazel文档我应该将每个标头添加到srcs列表中。(要清楚,这些是我正在构建的库在内部使用的标头,而不是公共接口的一部分,因此它们不属于hdrs。)但是,如果我尝试这样做,

  srcs = [ ..., "path/to/dependent/headers/header.h",]
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息

错误:...跨越子包的边界...(也许您打算将冒号放在此处:...?)

因为带有标题的目录不是Bazel软件包。

如果我按照错误消息的提示尝试将final /更改为冒号,

  srcs = [ ..., "path/to/dependent/headers:header.h",]
Run Code Online (Sandbox Code Playgroud)

然后

错误:目标名称不能包含“:”。

该巴泽尔C ++教程这里,在一节“产生额外包括路径”说,外界包括目录应该通过声明科普特人

cc_library(
    name = "some_lib",
    srcs = ["some_lib.cc"],
    hdrs = ["some_lib.h"],
    copts = ["-Ithird_party/some_lib"],
)
Run Code Online (Sandbox Code Playgroud)

但是添加-I标志并不能消除“未声明的包含”错误!

$ bazel version
Build label: 0.4.3
Build target: …
Run Code Online (Sandbox Code Playgroud)

c++ bazel

5
推荐指数
2
解决办法
4466
查看次数

什么是 GNOME_TERMINAL_SCREEN 环境变量?

我最近在我的一台计算机上安装了 Ubuntu 20.4 LTS。默认情况下,此版本的 Ubuntu 使用 gnome 桌面管理器 (3.36.3) 和 gnome-terminal (3.36.2)。

在我打开的每个终端窗口中,GNOME_TERMINAL_SCREEN 环境变量被定义为“/org/gnome/Terminal/screen/some-guid”,其中每个终端窗口的 GUID 都是唯一的。

有谁知道这个变量应该用于什么?是否有某种方法可以使用 Xlib 或 XCB 中的 GUID 来识别终端的 X 窗口?

gnome gnome-terminal

5
推荐指数
1
解决办法
147
查看次数

你如何获得Windows视频驱动程序的版本?

在Windows上,我的用户模式程序如何获取安装的视频卡的驱动程序版本号?

像ATI的"Catalyst Control Center"这样的程序可以向用户显示此信息或将其自动包含在错误报告中.他们是如何得到它的?

我一直在寻找通过PSDK文档,我找不到任何相关的东西.

用户程序可以通过Device Manager显示的数据库走路吗?
是否有IOCTL调用,如获取磁盘驱动器几何?
它是否在(可靠的)注册表项中?

windows device-driver

3
推荐指数
1
解决办法
5034
查看次数

通过优化找到矩阵

我正在寻找算法来解决以下问题:

我有两组矢量,我想找到最接近从输入矢量到输出矢量的变换的矩阵.

向量是3x1,因此矩阵是3x3.

这是一般性问题.我特别的问题是我有一组RGB颜色,另一组包含所需的颜色.我试图找到RGB到RGB的变换,这将使我的颜色更接近所需的颜色.

输入和输出向量之间存在对应关系,因此计算应该最小化的误差函数是容易的部分.但是我怎样才能最小化这个功能呢?

optimization linear-algebra blas colormatrix

2
推荐指数
1
解决办法
1028
查看次数