小编Pla*_*aHH的帖子

链接.so文件中的旧符号版本

在x86_64 linux上使用gcc和ld我需要链接到较新版本的库(glibc 2.14),但可执行文件需要在具有旧版本(2.5)的系统上运行.由于唯一不兼容的符号是memcpy(需要memcpy@GLIBC_2.2.5,但提供memcpy@GLIBC_2.14的库),我想告诉链接器,不应该使用memcpy的默认版本,它应该采用我指定的旧版本.

我发现了一种非常笨拙的方法:只需在链接器命令行中指定旧.so文件的副本即可.这工作正常,但我不喜欢有多个.so文件的想法(我只能通过指定我链接到的所有旧库,也有memcpy的引用)来检查svn并且我的构建系统需要.

所以我正在寻找一种方法来告诉链接器采用旧的版本符号.

对我不起作用的替代方案是:

  • 使用asm .symver(在Trevor Pounds博客的Web Archive上看到)因为这需要我确保symver在所有使用memcpy的代码之前,这将是非常困难的(具有第三方代码的复杂代码库)
  • 使用旧库维护构建环境; 仅仅是因为我想在我的桌面系统上进行开发,并且在我们的网络中同步这些东西将会变得很有用.

在考虑链接器所做的所有工作时,实现它似乎并不困难,毕竟它还有一些代码可以找出符号的默认版本.

任何其他与简单链接器命令行具有相同复杂程度的想法(如创建简单的链接描述文件等)也是受欢迎的,只要它们不像编辑生成的二进制文件那样奇怪的黑客...

编辑: 为了保护未来的读者,除了以下的想法,我找到--wrap了链接器的选项,这有时也很有用.

c linux linker gcc ld

43
推荐指数
5
解决办法
3万
查看次数

数据表和不需要的水平滚动条的问题

我希望这是一个相当简单的问题.

我试图使用Datatables创建一个没有任何水平滚动的表.该表有一些长数据行,我需要保持在一行并隐藏溢出.

看起来我在这里缺少一些相当基本的数据表,但是当表格得到垂直滚动条时,我似乎无法摆脱水平滚动条.

http://jsfiddle.net/FBpLA/3/

有两个表(相同的数据),两者都非常简单地初始化.

$('#mytable').dataTable({
    bFilter: false,
    bInfo: false,
    bPaginate: false,
});

$('#mytable2').dataTable({
    bFilter: false,
    bInfo: false,
    bPaginate: false,
    sScrollY: '150px'
});
Run Code Online (Sandbox Code Playgroud)

页面的样式非常简单

body {
     height:100%;
     color: #000000;
     font-family: Helvetica, Arial, Verdana, sans-serif;
     font-size: 10pt;
     background-color: #B4D4EC;
 }
 .main-panel {
     display:block;
     background:white;
     padding:20px;
     height: 100%;
     position:absolute;
     width: 700px;
     top: 139px;
     bottom: 110px;
 }
 th {
     text-align:left;
 }
 td {
     border-spacing:0;
     white-space:nowrap;
     overflow: hidden;
     text-overflow: ellipsis;
     -ms-text-overflow:ellipsis;
 }
Run Code Online (Sandbox Code Playgroud)

html css jquery datatables

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

什么是glibc free/malloc/realloc无效的下一个大小/无效指针错误以及如何修复它?

您很可能会看到这个问题,因为您的问题已被关闭,因为它与此相关.有关相关问题的中等完整列表,请参阅可能重复的长列表 -元数据库溢出中的C内存分配和超限界限.


示例问题

来自免费char*:无效的下一个尺寸(快)noobie在2014-04-11 问.

char*在连接过程后释放了一个,但是我收到了这个错误:

free(): invalid next size (fast): 0x0000000001b86170
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

void concat(stringList *list) {
    char *res = (char*)malloc(sizeof(char*));

    strcpy(res, list->head->string);

    list->tmp = list->head->next;
    while (list->tmp != NULL) {
        strcat(res, ",");
        strcat(res, list->tmp->string);
        list->tmp = list->tmp->next;
    }

    printf("%s\n", res);
    free(res);
}
Run Code Online (Sandbox Code Playgroud)

通用问题

运行我的程序时,我看到如下错误消息:

*** glibc detected *** ./a.out: free(): corrupted unsorted chunks: 0x12345678 ***
Run Code Online (Sandbox Code Playgroud)

详细信息可以包含以下任何一个*** glibc detected ***和程序名称之后的消息,后面跟一个十六进制地址(显示为0x12345678)和另一个***:

  • free(): corrupted unsorted chunks: 0x12345678
  • free(): …

c c++ memory glibc

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

从excel文件中读取缓存的外部字段,结果与我在excel中看到的结果不同

我试图在python3中使用xlrd读取excel文件,但是我没有从读取单元格得到结果,因为我在excel中看到它们.

我试图访问的单元格似乎有一些外部源集,从中刷新它们,但由于该源不可用,excel会显示一些缓存值.这些值位于同一个excel文件中的其他位置,因此当您在工作表中看到例如"2.65111"时,单元格的实际内容在excel的此编辑栏中显示为"= BC12".

当我尝试通过xlrd读取此内容时:

wb=xlrd.open_workbook("filename.xls",formatting_info=True)
wb.sheet_by_name("sheetname").cell(12,9)
Run Code Online (Sandbox Code Playgroud)

单元格内容显示为:

'text:'[XXXX]' (XF:95)'
Run Code Online (Sandbox Code Playgroud)

(其中XXXX很可能是此外部.csv文件的列的名称)

我要么期望xlrd返回我在excel中看到的"2.65111",或者至少将"= BC12"作为对其他单元格的引用,但我不能以任何方式使用"[XXXXX]"的东西.

有没有办法让xlrd显示这两个中的任何一个?

我真的很困惑它来自哪里"[XXXXX]",以及为什么这与我在excel中看到的如此不同.

PS:我不能只使用BC12单元格中的数据,因为这应该是文件的自动处理,只有"原始"单元格具有固定位置,而其他单元格可能在第二天处于另一个随机位置.

python excel xlrd python-3.x

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

返回一个指针数组?

我是一名初学程序员,我在使用C++ OOP方面遇到了很多麻烦.具体来说,今晚我正在尝试编写一个简单的类,它接收事件并在多个图像之间切换,并指向存储在数组中的每个图像.在尝试创建一个返回指向数组本身的指针的"getter"函数时遇到了一个令人困惑的问题.

基本上,我试图做这样的事情:

class SlideShow
{
public:
    image *getSlideArray();
private:
    image *slideArray[10];
};
Run Code Online (Sandbox Code Playgroud)

所以,我想要一个存储指向每个图像的指针的数组.我还想要一个返回数组本身地址的函数.我在尝试定义getSlideArray()函数时遇到了一个问题...我只是不完全确定它为什么不能正常工作......

这是我最初尝试的,在我的课程'源文件中:

image *SlideShow::getSlideArray()
{
    return this->slideArray;
}
Run Code Online (Sandbox Code Playgroud)

在这种尝试中,编译器一直在使用'this'关键字引发问题,说我试图返回的不是之前指定的类型.然而,这是我迄今为止编写getter函数的方式,它通常在使用简单变量时起作用......我怀疑这里存在一些问题,因为'this'是一个指针,'slideArray'是一个指向一个数组的指针,该数组也包含指针......但是我很可怕,现在这种引用的程度超出了我的想象.我花了一段时间才收集对指针的基本理解,使用地址和操作符等引用.指针和指针数组的指针更令人困惑.

我还要提一下,我找到了一个解决方法,我的代码编译.(虽然我不能真正运行它来检查它是否在运行时工作..)我的工作涉及将定义/返回语句添加到类声明本身(在头文件中):

class SlideShow
{
public:
    image *getSlideArray() {return *slideArray;);
private:
    image *slideArray[10];
};
Run Code Online (Sandbox Code Playgroud)

现在.这编译正确......但是,这也让我感到困惑.我知道通常,当你返回一个数组(比如一个int数组)时,你将返回数组的第0个插槽的地址.但是如果我试图返回一个intArray [5],当它返回时,我会简单地写'intArray',对吗?基本上,我并不感到困惑,为什么我必须在'slideArray'之前添加*在这种情况下......

所以无论我尝试做哪种方式,都让我感到困惑.我知道这里有一些'技巧',它可能与返回指针指针或指针的指针有关,但我只是无法自己解决.我真的希望学习这门课程,这样我才能开始掌握编程,尤其是OOP ......

谁能帮助我更好地理解这一点?

c++ arrays oop pointers return

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

类型说明符的组合无效?

这适用于xcode,但不适用于visual studio.错误是

错误C2236:意外的'enum''abc :: def ::`anonymous-namespace'::'.你忘记了';'吗?

我无法弄清楚出了什么问题.

namespace abc {
namespace def {

namespace {

long long enum {
  aaa = 1L,
  bbb = 2L,
};

}
}
}
Run Code Online (Sandbox Code Playgroud)

c++ namespaces compiler-errors visual-studio-2010 c++11

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