标签: compilation

有没有办法在Perl中预编译正则表达式?

有没有办法在Perl中预编译正则表达式?我有一个在程序中多次使用它并且它在使用之间没有变化.

regex perl compilation

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

如何编译单个Java文件

我搜索了这个,但我无法找到或理解我发现的东西.
现在我不是Java程序员,但是我需要将一个Java文件编译成现有的(已编译的)Java程序.我无法使用此Java代码的源代码,因此无法编译整个项目.
我对反编译原始项目不感兴趣.

如何使用JDK和javac快速完成此操作?(通过命令行是我更喜欢的.)

我知道要这样做,必须禁用单个java文件之外的错误检查,因为它无法读取依赖项.

在此先感谢,
-Aidiakapi

编辑:我有JAR文件,谢谢你的答案:)

java compilation

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

Python中的`goto`

我必须goto在Python中使用.我发现了托管,goto但我的Python实现(Mac上的CPython 2.7.1)没有这个模块,所以它似乎不是可移植的.它应该至少适用于支持CPython字节码的所有Python实现(特别是我关心CPython和PyPy).然后有这个相关的问题,和cdjc的goto.以下是答案给出的.

我可以手动构建字节码(即编写我自己的Python编译器)因为有这样的指令(JUMP_ABSOLUTE和朋友).但我想知道是否有更简单的方法.是否可以通过inspect左右来调用单个字节码指令?我还想过通过Python编译然后自动修补生成的Python字节码.


当然,如果我不解释为什么我真的需要这个,人们会问为什么,不会给我任何有用的答案.所以简而言之我的用例:我正在将一个C AST翻译成Python AST并编译它.我可以用某种方式将每个逻辑流(所有循环和其他东西)映射到等效的Python代码.除了之外的一切goto.相关项目:PyCParser(参见参考资料interpreter.py),PyCPython,PyLua.

python bytecode goto compilation

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

为什么我得到"对'dladdr'的未定义引用",即使是这个简单程序的-ldl?

我正在通过LLVM教程,但我在编译时遇到问题.我写了一个重现问题的最小例子:

#include "llvm/Module.h"
#include "llvm/LLVMContext.h"

int main(int argc, char **argv) {
    llvm::Module *module = new llvm::Module("test", llvm::getGlobalContext());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,我得到了一堆'未定义的引用'错误:

clang++ `llvm-config --cxxflags`   -c -o test.o test.cpp
clang++  test.o  `llvm-config --ldflags --libs core` -o test
/usr/lib/llvm-2.9/lib/libLLVMSupport.a(Signals.o): In function `PrintStackTrace(void*)':
(.text+0x6c): undefined reference to `dladdr'
/usr/lib/llvm-2.9/lib/libLLVMSupport.a(Signals.o): In function `PrintStackTrace(void*)':
(.text+0x1f6): undefined reference to `dladdr'
/usr/lib/llvm-2.9/lib/libLLVMSupport.a(Mutex.o): In function `llvm::sys::MutexImpl::MutexImpl(bool)':
(.text+0x53): undefined reference to `pthread_mutexattr_init'
/usr/lib/llvm-2.9/lib/libLLVMSupport.a(Mutex.o): In function `llvm::sys::MutexImpl::MutexImpl(bool)':
(.text+0x64): undefined reference to `pthread_mutexattr_settype'
/usr/lib/llvm-2.9/lib/libLLVMSupport.a(Mutex.o): In function `llvm::sys::MutexImpl::MutexImpl(bool)':
(.text+0x74): undefined …
Run Code Online (Sandbox Code Playgroud)

c++ ubuntu linker compilation llvm

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

我可以在C程序中使用C++创建的共享库吗?

我正在使用C创建程序.但是,我需要使用许多只有C++的API.那么,我是否有可能在C++中创建共享对象,然后使用C访问其功能?

  1. 我将传递和返回的唯一数据是C兼容的数据类型.
  2. 转换或迁移到cpp不是一个选项.

如果无法连接这些代码,我如何从C++代码获取信息到C代码?我尝试从C调用C++函数,但是当我包含时,我在链接期间遇到错误<string>.所以当我从C调用C++函数时,我应该只使用那些与C编译器兼容的代码吗?

C++头文件cppfile.hpp

#ifndef CPPFILE_H
#define CPPFILE_H
    #ifdef __cplusplus
    extern "C" {
    #endif

    extern int myfunction(const char *filename);

   #ifdef __cplusplus
   }
   #endif
#endif
Run Code Online (Sandbox Code Playgroud)

C++文件cppfile.cpp

#include "cppfile.hpp"
#include <string>
int myfunction(const char *filename) {
    String S(filename);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

C文件cmain.c

#include "cppfile.hpp"
int main(int argc, char **argv)
{
     int i = myfunction(argv[1]);
     printf("%d\n", i);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译:

gcc -c cmain.c
g++ -fPIC -shared -o cppfile.so cppfile.cpp
Run Code Online (Sandbox Code Playgroud)

c c++ compilation shared-libraries

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

使用以前版本的编译器是否可以防止代码注入?

我想知道今天的现代编译器,如MS cc,gcc,clang,icc,更新的版本是否使用相同编译器的当前版本构建?

因为当然存在这种风险:
http://scienceblogs.com/goodmath/2007/04/15/strange-loops-dennis-ritchie-a/
http://c2.com/cgi/wiki?TheKenThompsonHack

我确信参与上述编译器开发的每个人都知道这个问题,代码由自身的早期版本注入编译器并无形地传播.

现在真正的问题,实际上并不是后门之一,但更多关于代码生成的正确性不是吗?如果构建链中某处某些变态扭曲是由纯错误引入的,那么今天的编译器会生成错误的代码,即使编译器的源代码看起来不错,因为Ken Thompson的缺陷?

因此,如果他们是自己建造的,他们如何保护自己?

c c++ compiler-construction compilation

29
推荐指数
2
解决办法
1014
查看次数

如何提高Golang编译速度?

我正试图找到一种方法来更快地编译Go程序.目前大约30秒,这使得项目工作变得缓慢.

当我运行时go build -v,我发现大部分时间都花在编译go-sqlite3(链接到C sqlite lib)上.但是,由于这个lib永远不会改变,我想知道是否有可能阻止构建工具每次都重新编译它?

sqlite performance compilation go

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

为什么C++链接器允许未定义的函数?

可能令人惊讶的是,这个C++代码打印出来1.

#include <iostream>

std::string x();

int main() {

    std::cout << "x: " << x << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

x 是一个函数原型,它似乎被视为一个函数指针,而C++标准部分4.12布尔转换说:

4.12布尔转换[conv.bool] 1算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为bool类型的prvalue.零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.对于直接初始化(8.5),std :: nullptr_t类型的prvalue可以转换为bool类型的prvalue; 结果值为false.

但是,x永远不会绑定一个函数.正如我所料,C链接器不允许这样做.但是在C++中,这根本不是问题.谁能解释这种行为?

c++ linker compilation language-lawyer undefined-function

29
推荐指数
3
解决办法
1680
查看次数

使用make编译多个C文件

(我正在运行Linux Ubuntu 9.10,所以可执行文件的扩展名是executablefile.out)我刚刚进入C语言的模块化编程(用多个文件编程),我想知道如何在一个makefile中编译多个文件.例如,编译这些文件的makefile是什么:main.c,dbAdapter.c,dbAdapter.h?(顺便说一句,如果你还没有弄明白,主要功能是在main.c中)还有人可以发布一个指向makefile文档的链接吗?

c makefile compilation modular

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

摆脱"gcc - /usr/bin/ld:找不到警告库"

链接期间我有以下警告:

/usr/bin/ld: warning: libxxx.so.6, needed by /a/b/c/libyyy.so, not found (try using -rpath or -rpath-link)
Run Code Online (Sandbox Code Playgroud)

设置环境变量LD_LIBRARY_PATH = path_to_libxxx.so.6使警告静音(添加-Lpath_to_libxxx.so.6没有帮助).

我有一个单独的编译服务器,其中生成的二进制文件只是编译.二进制文件在其他服务器上执行,二进制文件可以看到libxxx.so.6(选中ldd executable).

是否还有其他方法可以在编译时摆脱警告(我有几次并且非常烦人)?

linux gcc compilation

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