小编max*_*uin的帖子

ld找不到现有的库

我试图在这个Debian lenny系统上将应用程序与g ++链接起来.ld抱怨它无法找到指定的库.这里的具体示例是ImageMagick,但我也遇到了类似的问题.

我正在调用链接器:

g++ -w (..lots of .o files/include directories/etc..) \
-L/usr/lib -lmagic
Run Code Online (Sandbox Code Playgroud)

ld抱怨:

/usr/bin/ld: cannot find -lmagic
Run Code Online (Sandbox Code Playgroud)

然而,libmagic存在:

$ locate libmagic.so
/usr/lib/libmagic.so.1
/usr/lib/libmagic.so.1.0.0
$ ls -all /usr/lib/libmagic.so.1*
lrwxrwxrwx 1 root root    17 2008-12-01 03:52 /usr/lib/libmagic.so.1 -> libmagic.so.1.0.0
-rwxrwxrwx 1 root root 84664 2008-09-09 00:05 /usr/lib/libmagic.so.1.0.0
$ ldd /usr/lib/libmagic.so.1.0.0 
    linux-gate.so.1 =>  (0xb7f85000)
    libz.so.1 => /usr/lib/libz.so.1 (0xb7f51000)
    libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7df6000)
    /lib/ld-linux.so.2 (0xb7f86000)
$ sudo ldconfig -v | grep "libmagic"
    libmagic.so.1 -> libmagic.so.1.0.0
Run Code Online (Sandbox Code Playgroud)

我如何进一步诊断这个问题,哪些可能是错的?我做的事情完全是愚蠢的吗?

linux linker gcc shared-libraries shared-objects

163
推荐指数
5
解决办法
59万
查看次数

`testl` eax对抗eax?

我想了解一些装配.

汇编如下,我对该testl行感兴趣:

000319df  8b4508        movl   0x08(%ebp), %eax  
000319e2  8b4004        movl   0x04(%eax), %eax  
000319e5  85c0          testl  %eax, %eax  
000319e7  7407          je     0x000319f0  
Run Code Online (Sandbox Code Playgroud)

我想了解的那点testl之间的%eax%eax?我认为这段代码的具体内容并不重要,我只是试图用自己来理解测试 - 这种价值总是不正确吗?

x86 assembly instructions

114
推荐指数
5
解决办法
8万
查看次数

浮点与现代硬件上的整数计算

我正在用C++做一些性能关键的工作,我们目前正在使用整数计算来解决本质上浮点的问题,因为"它更快".这会导致很多令人烦恼的问题,并增加了许多烦人的代码.

现在,我记得在大约386天的时间里读到关于浮点计算如此缓慢的情况,我相信(IIRC)有一个可选的共同进程.但是现在肯定会有指数级更复杂和更强大的CPU,如果进行浮点或整数计算,它在"速度"上没有区别吗?特别是因为与导致管道停滞或从主存储器中取出某些东西相比,实际计算时间很短?

我知道正确的答案是在目标硬件上进行基准测试,测试它的好方法是什么?我编写了两个很小的C++程序,并将它们的运行时间与Linux上的"时间"进行了比较,但实际的运行时间变化太大(无法帮助我在虚拟服务器上运行).没有花一整天的时间来运行数百个基准测试,制作图表等等,我可以做些什么来合理地测试相对速度?任何想法或想法?我完全错了吗?

我使用的程序如下,它们不相同:

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <time.h>

int main( int argc, char** argv )
{
    int accum = 0;

    srand( time( NULL ) );

    for( unsigned int i = 0; i < 100000000; ++i )
    {
        accum += rand( ) % 365;
    }
    std::cout << accum << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

计划2:

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <time.h>

int main( int argc, char** argv )
{

    float accum = 0;
    srand( time( NULL …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point x86 x86-64

96
推荐指数
8
解决办法
9万
查看次数

Go:从net.Conn获取io.ByteReader

我使用Go代码连接到TCP/IP服务器,类似于:

conn, err := net.Dial("tcp", host+":"+strconv.Itoa(port))
Run Code Online (Sandbox Code Playgroud)

现在我需要使用带有io.ByteReader的binary.ReadVariant,所以尝试编写如下代码:

var length int64
var err error
length, err = binary.ReadVarint(conn)
Run Code Online (Sandbox Code Playgroud)

给我一个错误,如:

./main.go:67: cannot use conn (type net.Conn) as type io.ByteReader in function argument:
    net.Conn does not implement io.ByteReader (missing ReadByte method)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

go

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

Ruby on Rails - 加载缓慢并在垃圾收集器中花费大量时间

我有一个大型 Rails 应用程序,我希望提高(令人沮丧的)性能。

使用 ruby​​-prof 运行对我没有多大帮助,我得到与此类似的输出(在瘦的生产模式下运行):

Thread ID: 9322800
Total: 1.607768
Sort by: self_time

 %self     total     self     wait    child    calls   name
 26.03      0.42     0.42     0.00     0.00     1657   Module#define_method 
  8.03      0.13     0.13     0.00     0.00      267   Set#initialize 
  4.41      0.07     0.07     0.00     0.00       44   PG::Result#values 
  4.28      0.07     0.07     0.00     0.00     1926   ActiveSupport::Callbacks::Callback#start 
  4.21      0.07     0.07     0.00     0.00    14835   Kernel#hash 
  4.13      0.08     0.07     0.00     0.01      469   Module#redefine_method 
  4.11      0.07     0.07     0.00     0.00       63  *<Class::ActiveRecord::Base>#with_scope 
  4.02      0.07     0.06     0.00     0.00      774   ActiveSupport::Callbacks::Callback#_compile_options 
  3.24      0.05     0.05 …
Run Code Online (Sandbox Code Playgroud)

ruby profiling garbage-collection ruby-on-rails

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

C++实现纯虚拟类的实例的集合

我在跨平台C++中工作,并且有一些像这样定义的类:(本例中大大简化了)

class ExampleBase
{
public:
    ExampleBase( int blah ) : blah_test(blah) { }

    virtual void DoSomething( ) = 0;
private:
    int blah_test;
};

class ExampleImplementer : public ExampleBase
{
public:
    ExampleImplementer( ) : ExampleBase( 5 ) { }

    virtual void DoSomething( ) { /* unique implementation here */ }
};
Run Code Online (Sandbox Code Playgroud)

最初我只有一个类,我在std :: vector中存储了一堆实例,并通过const引用传递.但是现在我需要一个基类(我想保持纯虚拟)和一些多态实现类.

拥有任何实现实例的集合的最佳方法是什么,并且仍然具有无泄漏的简单内存管理,例如堆栈分配了std :: vector?

  • 显然我现在不能有std :: vector <ExampleBase>,因为std :: vector要求类是非纯虚拟的(因为它进行内部分配/复制等).我不希望我的代码的用户意外地创建ExampleBase的实例,因为这是错误的.我也希望避免任何物体切片或任何其他恶意的可能性.

  • 一个阵列std::auto_ptr会做这个工作,但后来我必须处理初始化它们,寻找一个"免费插槽",没有迭代器等.所有这一轮重新发明似乎有点疯狂.

  • boost::ptr_vector看起来很有前途,但它的行为有点奇怪,因为在Linux上构建它需要ExampleBase是非纯虚拟的 - 我不明白为什么......所以boost::ptr_vector出来了.

这似乎是一个简单的,可能是非常常见的情况.那么最好的方法是什么?我对任何其他标准或提升方式持开放态度:以"最佳"为准.

c++ polymorphism pure-virtual

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