人们也经常会问"如何编译Perl?" 而他们真正想要的是创建一个可以在机器上运行的可执行文件,即使他们没有安装Perl.
我知道有几种解决方案:
其他推荐解决方案
我正在编写一个规则引擎,它执行由条件结构确定的简单赋值.规则是XML格式的项目的先决条件.我已经将我的XML模式建模为类似于简单的代码块.我希望解析XML,然后将其转换为Java代码.然后,我希望在运行时编译(并运行)此代码.这样做意味着我的规则引擎不再充当解释器,而是执行本机Java字节代码.
我已经找到了解析阶段和或多或少的Java代码生成阶段.我现在想弄清楚最后阶段 - 运行阶段的编译.
遵循这个线程:编译为java字节码(不使用Java)我已经意识到以下可能的解决方案:
我希望能比较这些以及在运行阶段解决Java编译的其他建议.
我正在使用Cygwin与GCC,最终我想在一个字符文件中读入一个字符向量,并使用此代码
#include <fstream>
#include <vector>
#include <stdlib.h>
using namespace std;
int main (int argc, char *argv[] )
{
vector<char> string1();
string1.push_back('a');
return 0;
}
Run Code Online (Sandbox Code Playgroud)
生成此编译时错误:
main.cpp:在函数
int main(int, char**)': main.cpp:46: error: request for memberpush_back'中的string1', which is of non -class typestd :: vector>()()'
我用一个int和字符串向量尝试了这个,他们有同样的问题.
我安装了NetBeans 6.9并在Ubuntu Linux 11.10上正常运行.我的目标是设定编译器选项一样-Wall,并-std=c99在默认情况下使用.目前,我必须右键单击我的项目 - >属性 - > C编译器 - >警告级别为" 更多警告 "并添加-std=c99到其他选项.在创建许多项目时,这显然是一种痛苦,我确信有一种方法可以使所有这些都成为默认项目.
我发现这个帖子与我的问题密切相关.但是,唯一的答案是安装Code :: Blocks和MSYS 1.0.11,这对我来说没什么意义.我没有看到安装另一个IDE会如何帮助我,MSYS似乎没必要,因为我已经在使用Linux了.
我已经尝试了所有可以想象的合理搜索词,并且我很惊讶我发现的信息很少.似乎大多数使用NetBeans的人都应该在某些时候改变这种类型的东西.我正在搜索的术语:'NetBeans -std = c99 default', 'NetBeans设置默认编译选项','如何使NetBeans默认使用c99'和'Code :: Blocks设置到NetBeans'.
请有人指出我正确的方向,或告诉我应该寻找什么.我想其他人也有同样的问题,所以我希望这个帖子有用.
我有一个maven项目,我用Netbeans编译.我有办法指定一个不同的构建目录,编译后复制编译的二进制代码?
struct Bar
{
Bar() {}
};
struct Foo
{
Foo() = default;
Bar m_bar;
};
int main()
{
Foo foo;
}
Run Code Online (Sandbox Code Playgroud)
使用C++ 11 default关键字和gcc警告时-Weffc++,gcc输出:
警告:'Foo :: m_bar'应该在成员初始化列表中初始化[-Weffc ++]
忽略这个警告是否安全?我应该向gcc提交错误吗?
我一直收到编译警告,但我不知道如何解决它:
'%d' expects argument of type 'int', but argument 2 has type 'long unsigned int' [
Run Code Online (Sandbox Code Playgroud)
程序运行正常,但我仍然收到编译警告:
/* Sizeof.c--Program to tell byte size of the C variable */
#include <stdio.h>
int main(void) {
printf("\nA Char is %d bytes", sizeof( char ));
printf("\nAn int is %d bytes", sizeof( int ));
printf("\nA short is %d bytes", sizeof( short ));
printf("\nA long is %d bytes", sizeof( long ));
printf("\nA long long is %d bytes\n", sizeof( long long ));
printf("\nAn unsigned Char is %d …Run Code Online (Sandbox Code Playgroud) 我们有一个Java项目.我们启用-Xlint(启用警告)和-Werror(将警告视为错误)标志javac,以确保我们的代码没有警告.最近我们决定弃用一堂课.在某些情况下,问题根本@SuppressWarnings("deprecation")不会抑制弃用警告,从而导致构建失败.以下是我遇到的用例列表:
输入参数.例如
@SuppressWarnings("deprecation")
public class Foo extends Bar<DeprecatedClass>
{ ... }
Run Code Online (Sandbox Code Playgroud)
然而,即使没有压制,这个也没有警告:
@Deprecated
public class DeprecatedClass extends Bar<DeprecatedClass>
{ ... }
Run Code Online (Sandbox Code Playgroud)AFAIK,没有注释导入的语法,因此对于案例1和2,我们的解决方案是导入*或避免导入.对于案例3和案例4,Java 6和7都不会禁止警告.Java 8将正确地抑制它(可能修复了一个错误).到目前为止还没有解决方案.
不幸的是,我们此时必须支持Java 6,7和8.有办法解决这个问题吗?它是我们Java API发展的障碍.
附录
很多人问为什么我们仍然在我们自己的代码库中使用已弃用的类.原因是该项目是一个图书馆,支持许多不同的客户.在引入新的替换API时,我们必须首先弃用旧的API,将其保留在我们的代码库中,等待所有客户端迁移然后将其删除.有三种常见用例:
Foo并Bar在Foo扩展的地方Bar.我的问题就是案例2和3.Foo并Bar在Foo扩展的地方Collection<Bar>.这是案例2和4.Foo和Bar.测试代码导入这些类.情况如此1.为什么要坚持考试?不要忘记,如果发现严重错误(例如内存泄漏,安全问题),并且客户端无法轻松迁移到新版本,我们仍需要为旧API提供错误修复.并且必须测试所有更改.
我觉得我们的情况应该在软件库开发和API演变中相当普遍.令人惊讶的是,Java用了很长时间(直到Java 8)来修复bug.
java compilation deprecated compiler-warnings suppress-warnings
我使用在线安装程序安装了Qt5.4(在ubuntu 14上工作).我正在尝试编译我的c ++源代码并链接到libQt5Core但是ld会抛出一个错误:
make
g++ -Wall test.o Party.o Communication.o FileParser.o PeerConnection.o ServerModule.o Utilities.o -o party -g -L/home/bush/Qt/5.4/gcc_64/lib -L/usr/lib/x86_64-linux-gnu/ -lQt5Core -lboost_system -lpthread
/usr/bin/ld: warning: libicui18n.so.53, needed by /home/bush/Qt/5.4/gcc_64/lib/libQt5Core.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libicuuc.so.53, needed by /home/bush/Qt/5.4/gcc_64/lib/libQt5Core.so, not found (try using -rpath or -rpath-link)
/home/bush/Qt/5.4/gcc_64/lib/libQt5Core.so: undefined reference to `ucal_setMillis_53'
/home/bush/Qt/5.4/gcc_64/lib/libQt5Core.so: undefined reference to `ucnv_fromUnicode_53'
/home/bush/Qt/5.4/gcc_64/lib/libQt5Core.so: undefined reference to `ucal_get_53'
/home/bush/Qt/5.4/gcc_64/lib/libQt5Core.so: undefined reference to `ucal_inDaylightTime_53'
/home/bush/Qt/5.4/gcc_64/lib/libQt5Core.so: undefined reference to `ucal_open_53'
/home/bush/Qt/5.4/gcc_64/lib/libQt5Core.so: undefined reference to `ucnv_countAvailable_53'
/home/bush/Qt/5.4/gcc_64/lib/libQt5Core.so: undefined reference …Run Code Online (Sandbox Code Playgroud) 我的程序与1.4.2完美搭配.安装完1.5后,我收到以下错误.
import runtime:不使用cgo或SWIG时不允许使用C源文件:atomic_amd64x.c defs.c float.c heapdump.c lfstack.c malloc.c mcache.c mcentral.c mem_linux.c mfixalloc.c mgc0.c mheap. c msize.c os_linux.c panic.c parfor.c proc.c runtime.c signal.c signal_amd64x.c signal_unix.c stack.c string.c sys_x86.c vdso_linux_amd64.c
该错误与程序无关.即使是"Hello world"程序也会抛出相同的错误.