可能的GCC错误:将库链接到项目时,缩短了长参数。C \ C ++

布勒格

我不确定这是否是错误或我只是缺少一些东西。我已经使用Code :: Blocks和CodeLite的MinGW的gcc版本4.8.1(tdm-2)以及另一个库(SFML)进行了尝试。每当我将库链接到程序时,对参数的读取方式与将库直接添加到程序中时的读取方式是不同的。这是我写的一个自定义库,只有一个大文件;我将其添加到项目中以快速找出库中的一些错误。将库直接编译到项目中后,一切正常。当我将库链接到项目时,长参数被删减。我将其简化为以下代码段:

unsigned int count = 0; count2 = 0;
char         charbuffer[128] = {0};
do
  {
    printf("\nBefore Count: %3d, Count2: %3d, Addthem: %3d, Next: %02X", count, count2, count+count2, argv[5][count+count2]);
    for(count = 0; argv[5][count+count2] != 0 && count < 128; ++count)
      charbuffer[count] = argv[5][count+count2];
    count2 += count;
    printf("\nAfter  Count: %3d, Count2: %3d, Addthem: %3d, Next: %02X", count, count2, count+count2, argv[5][count+count2]);
  }
while(argv[5][count+count2] != 0);  

参数的长度为344个字节(我在键盘上将其捣碎),并且当库直接位于程序中时,它循环4次,这正是我想要的。当我删除文件并链接库时,它仅运行2次。当我添加一个printf(“%s”,argv [5]); 它总是打印出完整的参数,在此之前我有一个计数器来检查参数的长度,因此我知道它已正确发送到程序中了;而且每次运行我总是使用相同的参数。

Output when in project:  
Before Count:   0, Count2:   0, Addthem:   0, Next: 32
After  Count: 128, Count2: 128, Addthem: 256, Next: 79
Before Count: 128, Count2: 128, Addthem: 256, Next: 79
After  Count: 128, Count2: 256, Addthem: 384, Next: 6D
Before Count: 128, Count2: 256, Addthem: 384, Next: 6D
After  Count:  88, Count2: 344, Addthem: 432, Next: 4E
Before Count:  88, Count2: 344, Addthem: 432, Next: 4E
After  Count:   0, Count2: 344, Addthem: 344, Next: 00  

Output when linked:  
Before Count:   0, Count2:   0, Addthem:   0, Next: 32
After  Count: 128, Count2: 128, Addthem: 256, Next: 79
Before Count: 128, Count2: 128, Addthem: 256, Next: 79
After  Count: 128, Count2: 256, Addthem: 384, Next: 00

据我所知,链接之前,出现问题之前,似乎限制了334个字节。Linux GCC似乎不受此错误影响。当我将其编译为带有或不带有链接的64位应用程序时,该错误似乎发生了。发生此问题时,不会更改文件。必须至少使用库的一部分。

谁能确认这是一个错误?我还应该发布其他内容吗?谢谢。

您有一个错误:count评估前,您应该将其清零while(argv[5][count+count2] != 0);

如果不这样做,您将argv超出范围访问数组,这在每个构建中可能会有所不同。

    ...
    count2 += count;
    printf("\nAfter  Count: %3d, Count2: %3d, Addthem: %3d, Next: %02X", count, count2, count+count2, argv[5][count+count2]);
    count = 0; // add this
  }
while(argv[5][count+count2] != 0); 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++。将.dll文件链接到项目

来自分类Dev

将共享库链接到其他共享库C ++项目

来自分类Dev

将静态库链接到 Visual C++ 中的新项目

来自分类Dev

将C编译的静态库链接到C ++程序

来自分类Dev

将C程序链接到C ++共享库

来自分类Dev

如何将C ++静态库链接到C程序?

来自分类Dev

在Windows上将Cython扩展链接到C库时出现“无法解析的外部符号”错误

来自分类Dev

将共享库彼此链接到共享库C ++

来自分类Dev

将共享库彼此链接到共享库C ++

来自分类Dev

如何将C ++ 17 stdc ++ fs库链接到混合语言(C ++和Fortran)CMake项目?

来自分类Dev

将静态C库与C ++代码链接时出现“未定义的引用”错误

来自分类Dev

将m5ops.h链接到C项目

来自分类Dev

尝试在Linux上使用“ gcc -L”将库添加到“ C”中的项目中-错误

来自分类Dev

通过mex将C ++链接到Matlab:传递参数

来自分类Dev

是否可以将macfuse链接到C ++静态库?

来自分类Dev

将Borland C Builder软件包链接到库

来自分类Dev

c-将已启用PGI OpenACC的库与gcc链接

来自分类Dev

c-将已启用PGI OpenACC的库与gcc链接

来自分类Dev

如何将项目链接到同一个 C 静态库的两个不同版本?

来自分类Dev

尝试将Lua标头导入C ++项目时出现链接器错误?

来自分类Dev

尝试将Lua头导入C ++项目时出现链接器错误?

来自分类Dev

使用ARC将C库添加到项目时出现错误

来自分类Dev

使用ARC将C库添加到项目时出现错误

来自分类Dev

ld MinGW链接到标准C库

来自分类Dev

c ++ MakeFile链接到SQlite库

来自分类Dev

CMake不会将C库链接到C ++程序

来自分类Dev

链接到具有外部“ C”功能的C ++库

来自分类Dev

将.ui文件链接到C ++

来自分类Dev

将QML链接到C ++-还是应该?

Related 相关文章

热门标签

归档