gpt4 book ai didi

c++ - 如何从 C/C++ 程序中调用 __strlen_sse2? [Linux]

转载 作者:太空狗 更新时间:2023-10-29 12:07:31 26 4
gpt4 key购买 nike

我会立即声明我不是程序员,而且我可能有点不知所措。

我正在尝试追踪作为 libc6-i686 的一部分安装在 Debian 中的 __strlen_sse2(程序集)函数中的错误。

我已经有了一份汇编代码(.S 文件),我需要找到一种从 C/C++ 程序中调用它的方法。我怎样才能做到这一点?

编辑:

尝试了这段代码,但我从 gcc 收到关于 undefined reference '__strlen_sse2' 的错误

编辑 2:据我了解,这是问题的正确答案,但我缺乏适当的知识来完成它。感谢大家的帮助。

#include <stdio.h>
#include <string.h>

size_t __strlen_sse2(const char *);

void main()
{
char buffer[255];

printf("Standby.. ");
gets(buffer);
__strlen_sse2("CRASH!");
printf("OK!\n");
}

就像我说的...不是程序员。

我希望我的问题是有道理的。如果您需要更多信息,请告诉我。

最佳答案

您不能在通常的动态链接 /lib/libc.so.6 中直接调用 __strlen_sse2 的拷贝,因为它是一个“隐藏符号” -- 可供 libc 本身内部的代码访问,但不可用于外部链接。

你说你有定义 __strlen_sse2.S 文件,来自 glibc 的源代码,但你需要修改它以便在 glibc 之外构建。我找到了我认为正确的文件,并且能够很容易地修改它。删除所有内容,但不包括读取 just

的行
        .text

并将其替换为:

#define PUSH(REG)       pushl REG
#define POP(REG) popl REG
#define PARMS 4
#define STR PARMS
#define ENTRANCE
#define RETURN ret
#define L(x) .L##x
#define ENTRY(x) .globl x; .type x,@function; x:
#define END(x) .size x, .-x

同时删除文件末尾的 #endif 行。然后像这样编译:

gcc -m32 -c strlen-sse2.S
gcc -m32 -c test.c
gcc -m32 test.o strlen-sse2.o
./a.out

您可能不需要 -m32

您可能可以从 superuser.com 获得一些解决您的更大问题的帮助。 -- 在你的问题中提供 /proc/cpuinfo 的内容。

关于c++ - 如何从 C/C++ 程序中调用 __strlen_sse2? [Linux],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4848373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com