|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2019/2/18 20:57:40 |
标题: |
delphi10.2 64位调用函数后 size = 0 32正常 |
浏览:2021 |
|
加入我的收藏 |
楼主: |
Embarcadero® RAD Studio 10.2 Version 25.0.31059.3231 用了 ide fix pack 6.3.0.0 6.3.1 编译补丁
procedure LZOCompressStream(const Source, Dest: TStream); var Size: LongWord;
Buf, Tmp: Pointer; ComprSize: LongWord; i:integer; begin Size:= Source.Size; GetMem(Buf, Size); try Source.Seek(0, soFromBeginning); Source.Read(Buf^, Size); GetMem(Tmp, Size); try i:=_lzo1x_1_compress(Buf,source.Size,tmp,ComprSize,@Work);//运行完本行后Size=0 // OutputDebugString(PWideChar(i.ToString)); // Dest.Seek(0, soFromBeginning); Dest.Write(ComprSize, SizeOf(LongWord)); //写入第一个 也就是压缩后的大小 Dest.Write(size, SizeOf(LongWord)); //写入第二个 压缩前的大小 if( ComprSize > 0) and( Size>0 )then // 64bug 由这里写 Size = 0 出错后发现 Dest.WriteBuffer(Tmp^, ComprSize); //写入流 finally FreeMem(Tmp); end; finally FreeMem(Buf); end; end; 带 视频 运行 文件 详见FTP /x64.7z ftp://uploads@uploads.2ccc.com/x64.7z 一会用10.3.1试试。。。
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/ |
作者: |
|
2019/2/18 21:22:50 |
1楼: |
10.3.1 依旧清空
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
|
作者: |
|
2019/2/18 22:01:27 |
2楼: |
解决用 NativeInt 变量 预计是 ComprSize 变量 Size 共用内存了? ComprSize 也有值啊。。Size不至于=0 用 NativeInt 32 64 会有区别啊。。。得处理下
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
|
作者: |
|
2019/2/18 22:37:05 |
3楼: |
_lzo1x_1_compress(), 这个函数第三个参数类型为size_t, 在x64下是64bit,
ComprSize: LongWord; LongWord类型恐怕不行吧
----------------------------------------------
报到
|
作者: |
|
2019/2/18 22:57:02 |
4楼: |
要支持64位,一般都应该用NativeInt,或与其兼容的类型.
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
|
作者: |
|
2019/2/19 11:49:27 |
5楼: |
谢谢楼上的各位 查看定义。 # if (LZO_OS_WIN64) typedef unsigned __int64 lzo_uint; typedef __int64 lzo_int; typedef lzo_ullong_t lzo_uint;// typedef lzo_llong_t lzo_int;// typedef unsigned int lzo_uint; typedef int lzo_int; typedef unsigned long lzo_uint; typedef long lzo_int;
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
|
作者: |
|
2019/2/19 12:42:30 |
6楼: |
typedef unsigned __int64 lzo_1; typedef __int64 lzo_2; /* typedef lzo_ullong_t lzo_3; typedef lzo_llong_t lzo_4;*/ typedef unsigned int lzo_5; typedef int lzo_6; typedef unsigned long lzo_7; typedef long lzo_8; typedef struct { lzo_1 lzo_11[1];
} _context1; typedef struct {
lzo_2 lzo_12[1];
} _context2; typedef struct {
lzo_5 lzo_15[1];
} _context5; typedef struct {
lzo_6 lzo_16[1];
} _context6; typedef struct {
lzo_7 lzo_17[1];
} _context7; typedef struct { lzo_8 lzo_18[1]; } _context8;
sizeof(_context1):8 sizeof(_context2):8 sizeof(_context5):4 sizeof(_context6):4 sizeof(_context7):4 sizeof(_context8):4
还不清楚 typedef unsigned __int64 lzo_1; typedef __int64 lzo_2; 这两个定义有啥区别
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
|
作者: |
|
2019/2/19 13:30:50 |
7楼: |
lzo_1 dbFileSize = 18446744073709551615u; lzo_2 fileSize = -9223372036854775808; 搞明白了! sprintf fileSize = -9223372036854775808 bytes dbFileSize = 18446744073709551615 bytes
32位 由于编译出问题 未能测试
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
|
作者: |
|
2019/2/19 22:05:52 |
8楼: |
ubuntu64 sizeof(_context1):8 改long long sizeof(_context2):8 改long long sizeof(_context5):4 sizeof(_context6):4 sizeof(_context7):8 sizeof(_context8):8
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
|
作者: |
|
2019/2/23 17:24:38 |
9楼: |
准备 官方 lzo-2.10.tar.gz http://bbs.2ccc.com/topic.asp?topicid=276561 二楼附件 Ubuntu 需要安装autoconf 编译 autoconf ./configure make make check make test (run a full test) sudo make install (管理员才可以操作系统目录) (安装完毕会有一堆目录 接下来用得到 用来找文件) 回到 ide工程 在linux 右键 Edit sdk add $(SDKROOT)/usr/local/include 选Include path add $(SDKROOT)/usr/local/lib 选library path 右边 点保存图标 点 update local File Cache 点保存回到项目 点编译 届时 会报错 具体操作 ld -llzo2 --verbose attempt to open //usr/lib/x86_64-linux-gnu/libfakeroot/libc.so failed //usr/local/lib/x86_64-linux-gnu/liblzo2.a failed 若干链接 都是找不到 其实文件在 /lib/x86_64-linux-gnu/liblzo2.so.2.0.0 对没错后面有 2.0.0 这个是编译用不到的 怎么处理呢? 生硬点 用linux硬链接与软链接 方法 你复制一份也行? 软链接(符号链接) ln -s source target 硬链接 (实体链接)ln source target ln -s /lib/x86_64-linux-gnu/liblzo2.so.2.0.0 对应ld -llzo2 --verbose 命令任意一个failed路径 /liblzo2.so 没错是so 非so.2.0.0 ln -s /usr/local/lib/liblzo2.a 对应ld -llzo2 --verbose 命令 任意一个liblzo2.a failed路径 /liblzo2.a
接下来直接编译没啥问题了 还有问题 处理好 本地 liblzo2.so.2.0.0 文件名 只认liblzo2.so 啊 。传上去
ubuntu运行 。压缩 win64 解压 MD5 一致 。。ok linux 调用第三方LIB结束 觉得看不懂我的可以看 https://blog.grijjy.com/2017/04/06/importing-third-party-linux-libraries-on-delphi-10-2-tokyo/ 附上一个 改好的可以直接测试的 请不要用于生产除非你了解 lzo 和我改的接口 对不对?
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
|
作者: |
|
2019/2/23 17:25:27 |
10楼: |
吐槽下 linux 编译 不让用这个{$L 'ubuntugcc64.o'}
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
|
作者: |
|
2019/2/23 22:44:36 |
11楼: |
$L 在linux下的用法
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
|
作者: |
|
2019/3/13 20:56:06 |
12楼: |
编译了一份 arm-linux-androideabi-gcc 版本的 32 64 .o 改天测试下。。嘿嘿
arm-linux-androideabi-gcc -m32 -s -Wall -O2 -fomit-frame-pointer -c minilzo.c -o gcc32.o arm-linux-androideabi-gcc -m64 -s -Wall -O2 -fomit-frame-pointer -c minilzo.c -o gcc64.o clang80: warning: argument unused during compilation: '-s' [-Wunused-command-line-argument]
export PATH=/home/用户名/ndk/arm-linux-androideabi/bin/:$PATH
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
|
|