小编Bre*_*ale的帖子

安装了libtool但找不到libtoolize

我试图在我的mac上从源代码构建libxml2.

所以我使用mac ports安装了autoconf libtool和automake

autoconf和automake似乎正如预期的那样正常工作.

我首先尝试运行autogen.sh.

不幸的是,libtoolize --version给出了

-bash: libtoolize: command not found
Run Code Online (Sandbox Code Playgroud)

我尝试跑步(再次)

sudo port install libtool

--->  Cleaning libtool
--->  Scanning binaries for linking errors: 100.0%
--->  No broken files found.
Run Code Online (Sandbox Code Playgroud)

我试试

locate libtool
Run Code Online (Sandbox Code Playgroud)

它似乎安装得很好

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man/man1/libtool.1
/Applications/Xcode.app/Contents/Developer/usr/bin/libtool
/Applications/Xcode.app/Contents/Developer/usr/share/man/man1/libtool.1
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/cross/mipsel-linux-binutils/files/110-uclibc-libtool-conf.patch
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/devel/libtool
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/devel/libtool/Portfile
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/devel/libtool/files
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/devel/libtool/files/ltmain.m4sh-allow-clang-stdlib.diff
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/devel/libtool-devel
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/devel/libtool-devel/Portfile
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/devel/openslp/files/libtool-tags.patch
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/devel/t1lib/files/patch-libtool-tag.diff
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/print/pdflib/files/patch-libtool.diff
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/security/steghide/files/libtool-tag.diff
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/www/apache2/files/libtool-tag.diff
/usr/bin/libtool
/usr/lib/php/build/libtool.m4
/usr/share/apr-1/build-1/libtool
/usr/share/man/man1/libtool.1
Run Code Online (Sandbox Code Playgroud)

我如何让libtoolize工作?

macos autoconf autotools libxml2 libtool

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

clang(LLVM)内联汇编 - 无限溢出/重载的多个约束

clang/gcc:一些内联汇编操作数可以满足多个约束,例如"rm",当操作数可以满足寄存器或存储器位置时.例如,64 x 64 = 128位乘法:

__asm__ ("mulq %q3" : "=a" (rl), "=d" (rh) : "%0" (x), "rm" (y) : "cc")
Run Code Online (Sandbox Code Playgroud)

生成的代码似乎为参数选择了一个内存约束3,如果我们注册了饥饿就可以了,以避免溢出.显然,x86-64的注册压力要小于IA32.但是,(通过clang)生成的程序集片段是:

    movq    %rcx, -8(%rbp)
    ## InlineAsm Start
    mulq -8(%rbp)
    ## InlineAsm End
Run Code Online (Sandbox Code Playgroud)

选择内存约束显然毫无意义!将约束更改为:"r" (y)但是(强制注册)我们得到:

    ## InlineAsm Start
    mulq %rcx
    ## InlineAsm End
Run Code Online (Sandbox Code Playgroud)

正如所料.这些结果适用于clang/LLVM 3.2(当前Xcode版本).第一个问题:为什么clang会在这种情况下选择效率较低的约束?

其次,有较少广泛使用的,用逗号分隔,多个替代约束语法:
"r,m" (y),这应该评估各方案的成本,并选择导致较少拷贝的一个.这似乎有效,但是clang只选择了第一个 - 如下所示:"m,r" (y)


我可以简单地删除"m"替代约束,但这并不表示可能的合法操作数的范围.这让我想到第二个问题:这些问题是否已在3.3中得到解决或至少得到承认?我试过查看LLVM开发档案,但我宁愿在不必要地进一步限制约束或加入项目讨论等之前征求一些答案.

assembly gcc x86-64 clang inline-assembly

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

C++ 11 noexcept限定符和内联方法

当C++ 11 inline调用使用noexcept限定符声明的其他函数时,C++ 11是否对函数或方法提供任何保证?

class My_String { ...

    const char * c_str () const noexcept;
    inline operator const char * () const { return c_str(); }
};
Run Code Online (Sandbox Code Playgroud)

我假设优化编译器可以自由地实现内联方法,而没有完整的EH和堆栈展开,根据noexcept资格.我也希望这也是一个简单的访问方法:

... inline operator const char * () const { return m_buffer; }
Run Code Online (Sandbox Code Playgroud)

虽然这个例子看起来微不足道,但异常保证在用于实现其他类或函数时很重要.问: C++ 11标准是否解决了这个问题,还是应该标记内联方法noexcept?或者noexcept除非需要匹配类或函数规范,否则最好省略?

编辑:为避免一些混淆:noexcept内联方法是隐式的吗?

c++ inline exception noexcept c++11

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

浮点除法 - 偏向于避免结果小于"精确"值

我目前正在收紧浮点数值以估算一个值.(p(k,t)对于那些感兴趣的人来说.)从本质上讲,效用永远不会低估这个值:可能的素数生成的安全性取决于数字上强大的实现.虽然输出结果与公布的值一致,但我使用该DBL_EPSILON值来确保除法产生的结果永远不会小于真值:

考虑: double x, y; /* assigned some values... */

评估:r = x / y;频繁发生,但这些(有限精度)结果可能会截断真实结果中的有效数字 - 可能是无限精确的合理扩展.我目前试图通过对分子应用偏差来缓解这种情况,即

r = ((1.0 + DBL_EPSILON) * x) / y;
Run Code Online (Sandbox Code Playgroud)

如果你对这个问题一无所知,p(k,t)通常比大多数估计要小得多 - 但是用这个"观察"来解决问题根本不够好.我当然可以说:

(((1.0 + DBL_EPSILON) * x) / y) >= (x / y)
Run Code Online (Sandbox Code Playgroud)

当然,我需要确保'偏差'结果大于或等于'确切'值.虽然我确信它与操纵或缩放有关DBL_EPSILON,但我显然希望"偏差"结果超出"精确"结果的最小值 - 可以在IEEE-754算术假设下证明.

是的,我看过Goldberg的论文,并且我一直在寻找一个强大的解决方案.请不要建议操纵舍入模式.理想情况下,我是一个非常了解浮点定理的人的回答,或者知道一个非常好的例子.


编辑:澄清(((1.0 + DBL_EPSILON) * x) / y)或表格(((1.0 + c) * x) / y)不是先决条件.这只是我使用的方法"可能足够好",没有为它提供坚实的基础.我可以说分子和分母不是特殊值:NaNs,Infs等,分母也不是零.

c floating-point floating-accuracy ieee-754

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

替换现有VAO中的VBO

我有关于各种顶点属性维也纳组织一个VAO:顶点位置,顶点法线,和元件阵列VBO(所有STATIC_DRAW),从而呈现一个实例只要求:

glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, <count>, <type>, 0);
Run Code Online (Sandbox Code Playgroud)

但是,我想绘制一个对象的多个实例(我仅限于OS X GL 3.2核心配置文件BTW),每个实例具有不同的顶点纹理(s,t)坐标.texcoord VBO使用STREAM_DRAW提示(尽管我可能会使用DYNAMIC_DRAW).

它是更有效地结合VAO,结合当前texcoord VBO,并通过设置属性指针glVertexAttribPointer,最终确定与VAO glBindVertexArray(0)并画出一个带有不同纹理坐标的新实例?或者更新VAO的成本是否会使这种方法变得糟糕?如何glBufferSubData在绑定的VAO中更新texcoord VBO ?

在对单独的方法进行基准测试之前,我真的很感激一些反馈,因为错误的选择将导致重大的重构.

opengl performance vbo opengl-3

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

逗号作为变量初始化的分隔符(不作为运算符)

这似乎是一个简单的问题,但是我没有用我自己的风格检查过多少年......当初始化用逗号分隔的变量时,我认为以下是不安全的做法:

unsigned int n = foo.size, nxn = n * n;

因为我实际上并没有使用逗号运算符作为语法糖等; 而是表明两个表达式是独立的 - 作为对'细粒度并行'(或表达式独立性)的一种隐式评论,通常会使代码更简洁,例如,

if (<some condition>)
    a = true, b = value;
Run Code Online (Sandbox Code Playgroud)

而不是要求{}分号分隔表达式的范围.

但我的问题是重新检查变量初始化的情况.我的假设是不正确的,nxn不能依赖于按预期初始化?或者我一直在误解?

c c++ variables initialization comma

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

mmap:不允许操作

我试图在用户空间中使用mmap来读取'mem_map'开始的物理内存.它是一个包含所有物理页面的数组.这是运行3.0内核的i386机器.

代码是这样的:

....

//define page size
//
#define PAGE_SIZE 0x1000 //4096 bytes
#define PAGE_MASK (PAGE_SIZE - 1)

....

  /* open /dev/mem file*/
  if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) {
        printf("/dev/mem could not be opened.\n");
    perror("open");
        exit(1);
  } else {
    printf("/dev/mem opened.\n");
  }

  /* Map one page */
  printf(" mem_map is at physical addr: 0x%x\n", mem_map_phy_addr);

  map_base = mmap(0, PAGE_SIZE, PROT_READ, MAP_SHARED, fd, (mem_map_phy_addr & ~PAGE_MASK)); //mem_map_phy_addr is at 0x356f2000

  if(map_base == (void *) -1) {
    printf("Memory map failed. …
Run Code Online (Sandbox Code Playgroud)

c linux

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

C预处理器宏 - 定义与价值可携带性和实践

对于特定于编译器的代码,通常会看到cpp指令,例如:

#if defined (__GNUC__) && (__GNUC__ >= 4)

这是我通常使用的预处理器测试 - 不仅仅是__GNUC__,但它是一个常见的例子.或者,

#if (__GNUC__ >= 4)

似乎满足相同的要求.后者有潜在的问题吗?不仅与gcc,而且任何符合标准的预处理器.LHS是否可以评估为某个值,即使它没有定义?任何语言律师都知道第二种方法是否有任何陷阱?

gcc c-preprocessor

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

std::deque 是可移动构造的,但不是“nothrow”

问题很简单,标题里已经概括了。是否有任何特殊原因导致这种情况?鉴于对象可以有效地交换内部状态,我确信这里有一些我忽略的东西......

c++ move move-constructor move-semantics c++17

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

通过自动工具查询pkg-config变量

要安装目录文件,我想获得Glade(UI设计器)的目录,如下所示:

$ pkg-config --variable=catalogdir gladeui-2.0
/usr/share/glade/catalogs
Run Code Online (Sandbox Code Playgroud)

但是在我的Makefile.am中的变量中。有(便携式)方法可以做到这一点吗?

automake autoconf glade pkg-config autotools

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