我有两个问题,第一个问题已经解决了.
当前问题
如果我嵌入了一个需要加载库的文件,例如jpeg图像或mp3音乐,我将需要使用该文件作为库的输入.但是,每个库都是不同的,并使用一种方法来获取文件作为输入,输入可以是文件名或FILE*指针(来自libc的文件界面).
我想知道如何访问带有名称的嵌入式文件.如果我创建一个临时文件,那将是低效的,还有另外一种方法吗?我可以将文件名映射到内存吗?我的平台是Windows和Linux.
如果show_file(const char*name)是库中的函数,我将需要一个字符串来打开该文件.
我已经看到了这些问题:
如何在内存中获取缓冲区的文件描述符?
从C中的文件描述符获取文件名
以下代码是我的解决方案.这是一个好的解决方案吗?它效率低下吗?
# include <stdio.h>
# include <unistd.h>
extern char _binary_data_txt_start;
extern const void* _binary_data_txt_size;
const size_t len = (size_t)&_binary_data_txt_size;
void show_file(const char* name){
FILE* file = fopen(name, "r");
if (file == NULL){
printf("Error (show_file): %s\n", name);
return;
}
while (true){
char ch = fgetc(file);
if (feof(file) )
break;
putchar( ch );
}
printf("\n");
fclose(file);
}
int main(){
int fpipe[2];
pipe(fpipe);
if( !fork() ){
for( int buffsize = len, done …Run Code Online (Sandbox Code Playgroud) 我正在制作一个设计为模块化的pygame程序.我正在使用main.py文件的pygame2exe构建一个exe,它基本上只是导入真正的主游戏并运行它.我希望的是一种将从EXE执行Python脚本的启动程序,而不是包含所有不可变文件的单个程序.
最好的方法是什么?我尝试使用imp在运行时动态导入所有模块而不是隐式导入它们,但这似乎打破了对象继承.
有没有办法在64位Windows环境中运行而不重新编译为x86时,在AnyCPU下编译的.NET应用程序作为32位应用程序?
据说通过使用C/C++,可以编写在平台上运行的"本机"程序.我对被认为是原生的东西感到困惑 - 处理器架构还是操作系统版本?
例如:
我有一个32位处理器和Windows 7(32位),我编译并生成和.exe文件.它可以保证在任何Windows 7 32位上运行吗?(在32/64位机器上赢7位32位)
Edit1:我不打算在这里只安装Windows操作系统.我的例子也可以扩展到Linux.例如,a.out在32位处理器上运行的32位Linux OS上生成可执行文件(默认情况下),然后在64位处理器上的32位Linux上运行它.
Edit2:感谢您的回复,但我还打算使用标准库和函数 - 没有特定于操作系统.只是ANSI或ISO C++标准规定的一次.没有对OS特定窗口系统或其他库的引用.谢谢
我想验证已签名的可执行映像的证书(通过验证,我的意思是告诉签名是否来自MS/Adobe/Oracle等).Windows是否为此任务提供api?我该怎么办,不知道.任何帮助,将不胜感激.我正在使用Windows和C++.我想验证本机可执行映像,而不是.NET程序集或Java jar文件.
UPDATE
好的,我会尽快描述我想要的东西.
1)验证PE证书.签名是否有效.当签名嵌入在PE中并且签名位于安全目录中时,它应该工作.(我在sysinternals论坛上发现这个并且运行正常,所以我不再需要这个了).
2)告诉谁是文件的签名者/出版者.我知道它可以通过CryptQueryObject实现(我找到了一个工作示例,虽然它不能与安全目录一起使用),但不知道如何将它与安全目录文件一起使用.
我在Window 7 OS上安装了Python 2.7.我希望使用py2exe将我的project.py打包在一个可执行文件中.按照说明我写了一个setup.py文件
from distutils.core import setup
import py2exe
setup(console=["project.py"])
Run Code Online (Sandbox Code Playgroud)
我收到了这条消息

我试图排除' libiomp5md.dll '
from distutils.core import setup
import py2exe
setup(console=["SegmentationAccuracy.py"])
dll_excludes = ['libiomp5md.dll']
Run Code Online (Sandbox Code Playgroud)
但总是我得到相同的错误消息"错误:libiomo5md.dll:没有这样的文件或目录"
我的可执行文件:
import math
import os
import numpy as np
import sys
import ogr
from progressbar import ProgressBar
from shapely.geometry import Polygon
nan = np.nan
Run Code Online (Sandbox Code Playgroud) 整整一天,我一直在尝试在Ubuntu 14.04下编译cx-Freeze并且没有运气.所以我放弃了,决定在这里问专家.
是)我有的
我试过两种方法:
从源安装
sudo python3 setup.py install
Run Code Online (Sandbox Code Playgroud)
我得到了什么
许多
MyPath/cx_Freeze-4.3.3/source/bases/Console.c:24: undefined reference to `PyErr_Print'
MyPath/cx_Freeze-4.3.3/source/bases/Console.c:24: undefined reference to `Py_FatalError'
Run Code Online (Sandbox Code Playgroud)
然后
collect2: error: ld returned 1 exit status
error: command 'i686-linux-gnu-gcc' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)
通过pip安装
sudo pip3 install cx-Freeze
Run Code Online (Sandbox Code Playgroud)
我得到了什么
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
错误:命令'i686-linux-gnu-gcc'以退出状态1失败
----------------------------------------
Cleaning up...
Command /usr/bin/python3 -c "import setuptools, tokenize;__file__='/tmp/pip_build_root/cx-Freeze/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-c954v7x6-record/install-record.txt --single-version-externally-managed --compile failed with …Run Code Online (Sandbox Code Playgroud) 有没有办法只创建一个这样的prolog脚本hello.pl:
#!/usr/local/bin/swipl -q -s -t main
main:-
write('Hello World\n').
Run Code Online (Sandbox Code Playgroud)
能够像这样从终端运行吗?
$ hello.pl
Hello World
$
Run Code Online (Sandbox Code Playgroud)
当我这样做时它给了我这个:
hello.pl: line 3: main:-: command not found
hello.pl: line 4: syntax error near unexpected token `'Hello World\n''
hello.pl: line 4: ` write('Hello World\n').'
Run Code Online (Sandbox Code Playgroud)
我可以通过在命令行上写这个来使它工作:
$ swipl -q -f hello.pl -t main
Hello World
$
Run Code Online (Sandbox Code Playgroud)
但有没有办法将直接脚本作为可执行文件运行?
编辑
还没有能够让这个工作.以下是@Boris在其答案评论中提出的命令的输出:
$ ls -l
total 8
-rwxr-xr-x 1 viatropos staff 235 Aug 26 20:28 example.pl
$ cat example.pl
#!/usr/local/bin/swipl
:- set_prolog_flag(verbose, silent).
:- initialization main.
main …Run Code Online (Sandbox Code Playgroud) 我正在使用PyInstaller使用PyQt创建python程序的单个可执行文件.它创建.exe并运行正常,但需要15到20秒才能启动.我认为我可以创建一个启动画面,以便用户至少知道发生了什么事,不幸的是,启动画面没有比程序窗口本身更快地显示.我也创建了与-onedir相同的程序,程序确实启动得更快,但这不是一个真正的分发选项.如果有人对什么在减慢执行速度和加快速度的方法有任何想法,我当然会很感激.谢谢.
executable ×10
c ×3
c++ ×3
python ×3
windows ×2
.net ×1
64-bit ×1
binary ×1
certificate ×1
command-line ×1
compilation ×1
cx-freeze ×1
directory ×1
exe ×1
file ×1
launcher ×1
linux ×1
native ×1
prolog ×1
py2exe ×1
pygame ×1
pyinstaller ×1
pyqt ×1
shell ×1
swi-prolog ×1
ubuntu ×1
validation ×1