在升级到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
但仍然没有解释这些问题.
是否有一种自动方式来获取大量的C++头文件并将它们组合在一起?
当然,此操作必须以正确的顺序连接文件,以便在即将到来的类和函数中使用之前不会定义任何类型等.
基本上,我正在寻找一些允许我将我的库分发到两个文件(libfoo.h, libfoo.a)中的东西,而不是当前的一堆包含文件+二进制库.
我正在尝试使用G ++ 4.6在具有受限内存资源的Linux系统上构建C++库.该库大量使用Boost.
我已经在这里和其他网站上看到了有关编译速度的各种线程,但我对使G ++对内存资源要求不高的提示和技巧很感兴趣,即使它意味着速度下降.
编辑:我已经尝试使用Boost的预编译头文件,它只提高了构建速度,但仍然需要大致相同的内存量.
在像这样的方法过载情况:
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)
谢谢!
我想调用 VCSStatus 函数,将当前工作目录(无论:pwd返回什么)传递给它。它必须是完整路径,并且没有特殊字符,例如“。” 被接受。
我正在尝试使用此变量,以便在生成根 FS 后删除一些不需要的初始化文件,请遵循以下文档:
我已将完全相同的代码片段添加到我的食谱 (.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 未执行。
ids = []
for object in objects:
ids += [object.id]
Run Code Online (Sandbox Code Playgroud) 我试图从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.有人能为这类问题提供一个有效的例子吗?
谢谢.