标签: gnu

std :: cout&operator <<的奇怪行为

我今天遇到了一些奇怪的东西,我想知道你们这里有没有人能解释发生了什么......

这是一个示例:

#include <iostream>
#include <cassert>
using namespace std;

#define REQUIRE_STRING(s)           assert(s != 0)
#define REQUIRE_STRING_LEN(s, n)    assert(s != 0 || n == 0)

class String {
public:
        String(const char *str, size_t len) : __data(__construct(str, len)), __len(len) {}
        ~String() { __destroy(__data); }

        const char *toString() const {
            return const_cast<const char *>(__data);
        }

        String &toUpper() {
            REQUIRE_STRING_LEN(__data, __len);
            char *it = __data;
            while(it < __data + __len) {
                if(*it >= 'a' && *it <= 'z')
                    *it -= 32;
                ++it;
            }
            return …
Run Code Online (Sandbox Code Playgroud)

c++ gnu

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

将 C 函数库链接到现代 64 位 Linux 中的 x86 汇编程序

我正在阅读一本专注于 x86 编程的书(专业汇编语言,WROX 2005)。昨晚我遇到了一些问题,我希望在今天回家之前解决这个问题,这样我就可以开始运行并继续文本。我的机器运行 x64 Ubuntu(如果我没记错的话,是 11.04),所以专注于 32 位 x86 的文本有点“过时”(在组装等时我必须添加 --32)。

我试图将 C 库函数与我的汇编程序动态链接,但没有成功(以下命令来自内存)。

ld -dynamic-linking /lib/ld-linux.so.2 -o complex -lc complex.o -m elf_i386
Run Code Online (Sandbox Code Playgroud)

在 Linux 中运行上述命令会显示它无法理解 -lc 的消息。好吧,所以我把它删除了。

ld -dynamic-linking /lib/ld-linux.so.2 -o complex complex.o -m elf_i386
Run Code Online (Sandbox Code Playgroud)

然后我收到“printf”无法识别的通知。希望动态链接器链接到库,但它似乎没有这样做。转到 \lib\ 我找不到 ld-linux.so.2 (奇怪的是它没有给我一个错误),但我确实找到了 ld-linux-86-64.so.2。我的代码是 32 位的,但我想到底是什么,让我们试试这个:

ld -dynamic-linking /lib/ld-linux-86-64.so.2 -o complex complex.o -m elf_i386
Run Code Online (Sandbox Code Playgroud)

但它仍然给出了相同的错误,即无法识别“call printf”。

需要帮助使用 64 位 Linux 和标准 GNU 工具将 C 库函数与我的 32 位汇编程序动态链接。

c linux assembly gnu

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

此错误消息从何而来?

我有一个名为 trickle 的程序,它发出警告,其源代码中有:

if (stat(sockname, &sb) == -1 &&
    (errno == EACCES || errno == ENOENT))
    warn("Could not reach trickled, working independently");
Run Code Online (Sandbox Code Playgroud)

但我得到的信息是:

trickle: Could not reach trickled, working independently: No such file or directory
Run Code Online (Sandbox Code Playgroud)

No such file or directory是从哪里来的?

c linux gnu

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

这个构造是什么意思“__builtin_expect(!!(x), 1)”

具体来说,我问的是双“!” 在 __built_in 的参数中。

按照“C”语言,它是双重否定吗?

c gcc gnu clang branch-prediction

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

合并两个 PO 文件并覆盖匹配的翻译规则

我正在尝试合并两个 PO 文件。

我有一个base.po包含一般翻译的文件。

我有一个extra.po额外的翻译,我想添加到基本文件或覆盖翻译,如果有匹配的翻译 ID。

我试过使用msgmerge

$ msgmerge extra.po base.po -o merge.po
Run Code Online (Sandbox Code Playgroud)

但这会注释掉任何具有匹配 ID 的翻译。

查看msgmerge文档,似乎没有任何选项可以影响此行为。

我希望能够拥有多个额外的翻译文件(extra1.poextra2.po等),以便我可以将它们与基本翻译文件合并并在不同的上下文中使用它们。

有谁知道如何做我正在尝试的事情?

merge translation gnu gettext command-line-interface

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

-lstdc++ 和 -lstdc++11 的区别

通过调用编译器标志“-lstdc++”来调用哪些标准?与“-lstdc++11”一样,c++11 标准被调用,同样可以被“-std=c++11”调用。

c++ gnu c++11

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

Windows 版 GNC 中缺少 WX GUI FFT 接收器

我是 GNU Radio 的新手,专注于使用 GretScott 网站进行培训。

我运行的是 Windows 10。我从官方网站安装了 3.7.13.5/v1.6 ,发现缺少块。我决定卸载并安装3.8.0.0/v1.7

安装进行得很顺利,尽管我还注意到启动后命令提示符中出现一条消息:

WARNING:gnuradio.grc.core.platform:Slow YAML loading (libyaml not available)
<<< Welcome to GNU Radio Companion 3.8.0.0 >>>

Block paths:
        C:\Program Files\GNURadio-3.8\share\gnuradio\grc\blocks
Run Code Online (Sandbox Code Playgroud)

我没有多想,就开始在 Companion 中翻找。我注意到最初缺少的块现在可用了。然而,我不再有任何 WX 块了。

有没有办法可以将这些块下载为 .yml 并将它们放置在块路径中?

我尝试从github 的链接安装 PyYAML然后运行:

python setup.py install
Run Code Online (Sandbox Code Playgroud)

我也跑了:

pip install -U wxPython
Run Code Online (Sandbox Code Playgroud)

两次尝试都没有运气,WX 块仍然丢失,并且我仍然在命令提示符上收到(libyaml 不可用)消息。

wxpython gnu gnuradio libyaml gnuradio-companion

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

在 GNU 编译器中发现错误。以后的版本?

我发现这段代码在优化时会在 gnu C++ 编译器中导致一个惊人的错误。

#include <stdio.h>

int main()
{
    int a = 333666999, b = 0;
    for (short i = 0; i<7; ++i)
    {
        b += a; 
        printf("%d  ", b);
    }
    return 9;
}
Run Code Online (Sandbox Code Playgroud)

使用g++ -Os fail.cpp可执行文件进行编译不会打印七个数字,它会永远继续,打印和打印。我在用 -

-rwxr-xr-x 4 root root 700388 Jun  3  2013 /usr/bin/g++
Run Code Online (Sandbox Code Playgroud)

以后有更正的版本吗?

c++ gnu fault

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

Gnuplot:多个窗口中的多个绘图

我想要绘制与同一文件的不同数据列相关的多个图,但我想要每个图都有一个新窗口。我不想要与该命令关联的附加图set multiplot layout 1,2。这个想法由以下伪代码表示:

>gnuplot

>plot "myfile.txt" u 1:4

>#make me plot another file without deleting the previous one i.e. open a new window on which data is plotted

>instructions I don't know

>plot "myfile.txt" u: ($3*$3) 

>#I obtain two windows
Run Code Online (Sandbox Code Playgroud)

plot gnu gnuplot

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

__gnu_linux__ 代表什么?

背景

我们有一些旧的 C++ 代码,其中包含只有在__gnu_linux__定义预处理器符号时才编译的部分。在我的 Ubuntu 20.04 和 GCC 9.3 上编译不是问题。现在,我们尝试将其移植到基于 Alpine Linux 和 GCC 10.2 的 Docker 容器,并发现在__gnu_linux__这种情况下未定义。

因此,我搜索了有关__gnu_linux__预处理器宏的任何文档,但在 GCC 或其预处理器 CPP 的文档中找不到任何内容。我能找到的唯一提示是以下预定义符号列表,但它没有提到任何文档:https : //sourceforge.net/p/predef/wiki/OperatingSystems/

问题

  • 我在哪里可以找到有关__gnu_linux__预处理器宏的任何官方文档?
  • GCC在什么条件下定义它?

研究至今

通过在 中进行全文搜索,/usr我获得了一些点击。一个是 Boost 头文件也查询该宏,另外两个是二进制文件cc1cc1plus. 我发现那些是分别为 C 和 C++ 实现预处理器的 GCC 的内部工具,但我找不到这些的任何官方文档。所以,我克隆了 GCC 源代码库,发现它__gnu_linux__在更改日志中只提到了一次,并且包含一些特殊的提交,用 更改了一行__gnu_linux__,但没有一个对它做出明确的声明。

c++ linux gcc preprocessor gnu

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