小编Dan*_*son的帖子

C++:编译错误 - "不会创建.eh_frame_hdr表"

我应该使用数据分析程序进行物理实验.我不能让它编译.

代码很旧,与我能找到的当前GCC版本不兼容.为了让事情更加节省时间,我从一个修改了所有makefile的人那里获得了代码,以便在Mac上编译.我没有C++经验,但是有了man-pages,Google和耐心,我已经修复了很多错误,但是我坚持这个,即使经过一周的尝试和谷歌搜索.

我相信相关的错误信息如下:

/usr/bin/ld: error in /home/daniel/skola/exjobb/miniballscripts
/lib/libCommandLineInterface.so(.eh_frame); no .eh_frame_hdr table will be created.`
Run Code Online (Sandbox Code Playgroud)

可能是什么原因,可以采取什么补救措施?

libCommandLineInterface.so 我之前编译过,没有任何明显的错误消息:

$ make  
g++ -g2 -O2 -I./ -c CommandLineInterface.cc -o CommandLineInterface.o  
g++ -g  -Wl -o /home/daniel/skola/exjobb/miniballscripts/lib/libCommandLineInterface.so
CommandLineInterface.o -lm -L/home/daniel/skola/exjobb/miniballscripts/lib -lgcc -lc  
Done
Run Code Online (Sandbox Code Playgroud)

我的g ++ - 版本是g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3,amd64.

正如我所说,我没有使用C++的经验,所以也许我天真的Makefile修改已经破坏了一些东西.我缺乏经验也使我不知道需要哪些其他信息来帮助我,但我很乐意回答.

c++ linker compilation ld

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

应用变换矩阵后计算路径中心

我在Inkscape中制作了一个徽标.为了学习我想通过SVG中的动画支持在徽标旋转中制作轮子形状.

实现旋转很容易,但我很难指定正确的旋转轴.形状是一个齿轮,我希望它围绕它的中心旋转.试验和错误给出了xy坐标(47.1275,1004.17)(其组件奇怪地不对称,但我猜这与Inkscape应用的转换矩阵有关)是一个很好的近似(见下面的animateTransform标签),但我怎么会从第一原则得到这个?

<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 321.281 150.799" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <g transform="translate(-9.9178912,-891.57237)">
        <g transform="matrix(1.9522781,0,0,1.9522781,4.6434311,-1008.1558)">
            <animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 47.1275 1004.17" to="45 47.1275 1004.17" dur="2s" fill="freeze" additive="sum" repeatCount="indefinite" />
            <g transform="matrix(0.65043772,0,0,0.65043772,-143.67477,980.4256)" stroke="#666" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="7.68713093" fill="none">
                <path stroke-linejoin="miter" d="m293.404-3.51576c-2.73916,0-5.41514,0.287192-8,0.8125v6.1875c-3.47484,0.838872-6.7198,2.18462-9.6875,4l-4.375-4.375c-2.24264,1.48612-4.29226,3.22977-6.1875,5.125s-3.63888,3.94486-5.125,6.1875l4.375,4.375c-1.81538,2.9677-3.16112,6.21265-4,9.6875h-6.1875c-0.5253,2.58486-0.8125,5.26083-0.8125,8s0.2872,5.41515,0.8125,8h6.1875c0.83888,3.47485,2.18462,6.7198,4,9.6875l-4.375,4.375c1.48612,2.24264,3.22976,4.29227,5.125,6.1875s3.94486,3.63888,6.1875,5.125l4.375-4.375c2.9677,1.81538,6.21266,3.16113,9.6875,4v6.1875c2.58486,0.525308,5.26082,0.8125,8,0.8125,2.73916,0,5.41514-0.287192,8-0.8125v-6.1875c3.47484-0.838872,6.7198-2.18462,9.6875-4l4.375,4.375c2.24264-1.48612,4.29226-3.22977,6.1875-5.125s3.63888-3.94486,5.125-6.1875l-4.375-4.375c1.81538-2.9677,3.16112-6.21266,4-9.6875h6.1875c0.5253-2.58485,0.8125-5.26083,0.8125-8s-0.2872-5.41515-0.8125-8h-6.1875c-0.83888-3.47485-2.18462-6.7198-4-9.6875l4.375-4.375c-1.48612-2.24264-3.22976-4.29227-5.125-6.1875s-3.94486-3.63888-6.1875-5.125l-4.375,4.375c-2.9677-1.81538-6.21266-3.16113-9.6875-4v-6.1875c-2.58486-0.525308-5.26084-0.8125-8-0.8125z" stroke-dashoffset="162" stroke="#666" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="7.68713093" fill="none"/>
            </g>
        </g>
    </g>
</svg>
Run Code Online (Sandbox Code Playgroud)

根据我在规范中的内容,我会说应用的转换矩阵是

1.9522781  0              4.6434311
0          1.9522781  -1008.1558
0          0              1
Run Code Online (Sandbox Code Playgroud)

0.65043772  0          -143.67477
0           0.65043772  980.4256
0           0             1
Run Code Online (Sandbox Code Playgroud)

它们是否(-9.9178912,-891.57237,0)在翻译转换后应用于xyz坐标?

我想上面的正确分析会让我得到所描述路径的左上角,或者可能是第一个手柄的坐标.在那之后,是否必须解析路径来决定边界框,从而决定路径的中心(因为它涉及一个有点圆形的对象)?

这是不是尝试在自由创建的形状上手动制作动画的一课吗?

animation svg matrix inkscape

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

Filehandles和XML :: Simple - >内存损坏.无法隔离问题

在一个小测试文件中,我可以运行

#!/usr/bin/perl
use warnings;
use strict;
use open qw{:utf8 :std};
use XML::Simple;

my @cmdline = ("hg", "log", "-v", "--style", "xml");
open my $xml, "@cmdline |";

my $xmllog = XMLin($xml, ForceArray => ['logentry', 'parent', 'copy', 'path']);

foreach my $rev (@{$xmllog->{logentry}}) {
    #do stuff
}
Run Code Online (Sandbox Code Playgroud)

它工作正常.当我在一个更大的程序中运行相同的代码(使用相同的XML输入)时,它终止于

*** glibc detected *** /usr/bin/perl: malloc(): memory corruption: 0x0a40e308 ***
Run Code Online (Sandbox Code Playgroud)

(完全崩溃日志@ pastebin.com)

但是,如果我做交换

#open my $xml, "@cmdline |";
my $xml = `@cmdline`;
Run Code Online (Sandbox Code Playgroud)

然后它工作(在两个文件中),所以这更像是一个好奇的问题,而不是一个真正的问题.

  1. 有没有人对我的测试用例和更大的代码库之间的差异有什么指示?
  2. 有速度/记忆/?不同命令调用的区别?最佳做法?

Debian Sid:Perl 5.12.4-1.

(这是我第一次遇到Perl,所以不要过多地考虑我应该对语言的了解.我只是潜入现有代码.)

(较大的程序是ikiwiki,所以代码不是秘密,但我不知道在哪里寻找麻烦,并且由于实际原因我不能在这篇文章中包含所有代码.这涉及Mercurial后端.)


根据cjm的建议,我添加了print …

perl ikiwiki

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

标签 统计

animation ×1

c++ ×1

compilation ×1

ikiwiki ×1

inkscape ×1

ld ×1

linker ×1

matrix ×1

perl ×1

svg ×1