小编cyb*_*rro的帖子

Ubuntu 11.10中的链接器问题

在升级到Ubuntu 11.10之后,我发现我的许多旧的和当前的开发都不能再编译了.我把问题简化为一个简单的例子:

#include <X11/Xlib.h>

int main() {
    Display* display = XOpenDisplay(":0.0");
    XCloseDisplay(display);

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

使用以下方法编译它:

g++ -lX11 test.cpp
Run Code Online (Sandbox Code Playgroud)

要么

g++ -c -o test.o test.cpp
g++ -lX11 -o test test.o
Run Code Online (Sandbox Code Playgroud)

导致失败发生:

/tmp/ccBAOpzy.o: In function `main':
test.cpp:(.text+0x11): undefined reference to `XOpenDisplay'
test.cpp:(.text+0x21): undefined reference to `XCloseDisplay'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我发现一些链接器的东西在11.10中发生了变化:

https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition

但仍然没有解释这些问题.

ubuntu linker gcc

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

结合C++头文件

是否有一种自动方式来获取大量的C++头文件并将它们组合在一起?

当然,此操作必须以正确的顺序连接文件,以便在即将到来的类和函数中使用之前不会定义任何类型等.

基本上,我正在寻找一些允许我将我的库分发到两个文件(libfoo.h, libfoo.a)中的东西,而不是当前的一堆包含文件+二进制库.

c++ include header-files

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

减少boost构建中的内存使用量

我正在尝试使用G ++ 4.6在具有受限内存资源的Linux系统上构建C++库.该库大量使用Boost.

我已经在这里和其他网站上看到了有关编译速度的各种线程,但我对使G ++对内存资源要求不高的提示和技巧很感兴趣,即使它意味着速度下降.

编辑:我已经尝试使用Boost的预编译头文件,它只提高了构建速度,但仍然需要大致相同的内存量.

c++ linux boost g++ boost-build

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

防止隐式模板实例化

在像这样的方法过载情况:

struct A
{
  void foo( int i ) { /*...*/ }
  template<typename T> void foo( T t ) { /*...*/ }
}
Run Code Online (Sandbox Code Playgroud)

除非明确命令,否则如何防止模板实例化?:

A a;
a.foo<int>( 1 ); // ok
a.foo<double>( 1.0 ); // ok
a.foo( 1 ); // calls non-templated method
a.foo( 1.0 ); // error
Run Code Online (Sandbox Code Playgroud)

谢谢!

c++ templates overloading overload-resolution

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

如何将当前目录放入vim命令行

我想调用 VCSStatus 函数,将当前工作目录(无论:pwd返回什么)传递给它。它必须是完整路径,并且没有特殊字符,例如“。” 被接受。

vim

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

Yocto 的 ROOTFS_POSTPROCESS_COMMAND 不起作用?

我正在尝试使用此变量,以便在生成根 FS 后删除一些不需要的初始化文件,请遵循以下文档:

http://www.yoctoproject.org/docs/1.8/ref-manual/ref-manual.html#migration-1.6-variable-changes-variable-entry-behavior

我已将完全相同的代码片段添加到我的食谱 (.bb) 文件中,但没有任何运气......出了什么问题?这是我放入 .bb 文件中的代码:

my_postprocess_function() {
   echo "hello" > ${IMAGE_ROOTFS}/hello.txt
}
ROOTFS_POSTPROCESS_COMMAND += "my_postprocess_function; "
Run Code Online (Sandbox Code Playgroud)

日志不显示任何类型的错误或警告,只是 my_postprocess_function 未执行。

yocto

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

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

Java的Enum.valueOf()问题

我试图从String派生一个枚举值,如:

Level level = Enum.valueOf(Level.class, "WARNING");
Run Code Online (Sandbox Code Playgroud)

但我得到的是编译器警告,如:

Test.java:8: <T>valueOf(java.lang.Class<T>,java.lang.String) in java.lang.Enum cannot be applied to (java.lang.Class<java.util.logging.Level>,java.lang.String)
Run Code Online (Sandbox Code Playgroud)

我知道1.5之前的JDK版本:

Level level = Level.valueOf("WARNING");
Run Code Online (Sandbox Code Playgroud)

会工作,但我正在使用JDK 1.6.有人能为这类问题提供一个有效的例子吗?

谢谢.

java enums

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