导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2019/4/22 20:17:04
标题:
delphi调用.c 运行出问题求助
浏览:2446
加入我的收藏
楼主:
目前在deelphi调试 发现是.o里面出问题了 dll版能用我改成.o调用就出错 出错信息如下 EAccessViolation: Access violation at address 0041B549 in module 'hashBens.exe'. Read of address 00000054 Press <ENTER> to exit... 接口我是不是翻译错了??还是编译需要啥参数?? 附件是全部源码
----------------------------------------------
[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/4/23 1:30:44
1楼:
.o是c语言的中间文件,妳这能支持?
----------------------------------------------
--
作者:
2019/4/23 9:27:47
2楼:
.o类似于.obj文件,.so才类似于.dll,.a类似于.lib,不过我之前只知道.o/.so/.a之类的东西是linux用的,windows下也能用吗?
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
2019/4/23 11:49:10
3楼:
http://bbs.2ccc.com/topic.asp?topicid=561051 这个帖子的 gcc 32 64 linux64(安卓,不懂没测) 我都测试了没问题 另外昨天翻译了个aes 也没问题 目前就这个。。不知道为何 调用报错。
----------------------------------------------
[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/4/23 16:28:48
4楼:
bcc 调用delphi 连接 c++ builder 生成obj文件 bjhash.cpp: Warning W8062 bjhash.cpp 177: Previous options and warnings not restored bcc32 -O2 -d -w -w-aus -c bjhash.cpp
----------------------------------------------
[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/4/23 18:46:45
5楼:
最新版可以支持.o文件的
----------------------------------------------
作者:
2019/4/23 18:51:14
6楼:
windows下可以使用MinGW来编译Linux程序,从而得到.o或者.a文件,最新版的Delphi可以直接支持.o文件
----------------------------------------------
作者:
2019/4/23 20:30:58
7楼:
我的疑问是.o是linux下的obj文件,delphi用的话应该也是编译为linux程序吧?可楼主是在exe里调用啊,难道这个exe不是windows程序?
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
2019/4/24 0:06:59
8楼:
.o在编译win64位时会生成,不是linux专用的
----------------------------------------------
==========
作者:
2019/4/24 9:33:35
9楼:
试了一下gcc生成的确实会出错,改用VC编译运行正常,不过这性能差距过于真实 Win32 hash all: [gccHash] 2048*1000000... 5.53s 9F7D8C53 524288*4000... 5.53s 803CFDEC 134217728*16... 5.78s 1108CD26 * 356.28 MB/s [pasHash] 2048*1000000... 14.70s 9F7D8C53 524288*4000... 15.16s 803CFDEC 134217728*16... 15.55s 1108CD26 * 132.17 MB/s
----------------------------------------------
-
作者:
2019/4/24 15:31:31
10楼:
找到出问题的点 有可能优化有关 delphi 不认 或者认错。。 或许我错了但是结果是对的。 else { const uint8_t *k = (const uint8_t *)key; while (length > 12) { a += k[0]; a += ((uint32_t)k[1])<<8; a += ((uint32_t)k[2])<<16; a += ((uint32_t)k[3])<<24; b += k[4]; b += ((uint32_t)k[5])<<8; b += ((uint32_t)k[6])<<16; b += ((uint32_t)k[7])<<24; c += k[8]; c += ((uint32_t)k[9])<<8; c += ((uint32_t)k[10])<<16; c += ((uint32_t)k[11])<<24; mix(a,b,c); length -= 12; k += 12; !!!!!!!!!! } switch(length) { case 12: c+=((uint32_t)k[11])<<24; case 11: c+=((uint32_t)k[10])<<16; case 10: c+=((uint32_t)k[9])<<8; case 9 : c+=k[8]; case 8 : b+=((uint32_t)k[7])<<24; case 7 : b+=((uint32_t)k[6])<<16; case 6 : b+=((uint32_t)k[5])<<8; case 5 : b+=k[4]; case 4 : a+=((uint32_t)k[3])<<24; case 3 : a+=((uint32_t)k[2])<<16; case 2 : a+=((uint32_t)k[1])<<8; case 1 : a+=k[0]; break; case 0 : return c; } }
----------------------------------------------
[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/4/24 15:38:18
10楼:
Win32 hash all: [gccHash] 2048*1000000... 3.45s 9F7D8C53 524288*4000... 3.55s 803CFDEC 134217728*16... 3.95s 1108CD26 * 547.85 MB/s [pasHash] 2048*1000000... 16.03s 9F7D8C53 524288*4000... 16.61s 803CFDEC 134217728*16... 17.45s 1108CD26 * 119.80 MB/s Press <ENTER> to exit... /* Orginal: http://burtleburtle.net/bob/c/lookup3.c  ;*/ /* To build : * MinGW32: gcc foo.c -O2 -shared -ofoog.dll * MSVC: cl foo.c /O2 /LD /Fefoov.dll */ 要梯子哎。https://github.com/kroki/Cuckoo-hash/raw/master/src/lookup3.c
----------------------------------------------
[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/4/24 16:32:10
11楼:
标记下大项目。 https://github.com/OISF/
----------------------------------------------
[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/5/16 16:33:33
12楼:
:start Cl /O2 /c bjhash.cpp pause goto start
----------------------------------------------
[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/
作者:
2021/1/17 22:01:53
13楼:
平台win 关于不能调用 gcc 生成的 .o 问题总结 (我调用了一个AES.C没问题) 本贴代码中多处用了类似 switch(length) 编译方法 gcc -m32 -s -Wall -O2 -c main.c -o gcc32.o gcc -m64 -s -Wall -O2 -c main.c -o gcc64.o 源代码 关键 switch uint32_t __cdecl set(uint32_t a,SqList* b) { int i; i = 0; switch(a) { case 0:{ b->a0 = 1; i = 0; break;} case 1:{ b->a1 = 1; i = 1; break;} case 2:{ b->a2 = 1; i = 2; break;} case 3:{ b->a3 = 1; i = 3; break;} case 4: { b->b0 = 1; i = 4; break;} case 5:{ b->b1 = 1; i = 5; break;} case 6:{ b->b2 = 1; i = 6; break;} case 7:{ b->b3 = 1; i = 7; break;} // default:printf("error");; } return i; } Delphi连接后运行 汇编 0060E47B 64668D4000 lea ax,[eax+$00] set_gcc: 0060E480 8B442404 mov eax,[esp+$04] 0060E484 8B542408 mov edx,[esp+$08] 0060E488 83F807 cmp eax,$07 0060E48B 0F87CF000000 jnbe $0060e560 0060E491 FF248500000000 jmp dword ptr [eax*4+$0000 ] 红色部分Delphi并未处理好偏移 或许是标准不一样导致不认识 0060E498 8DB42600000000 lea esi,[esi+$0000 ] gcc生成汇编文件 _set: pushl %ebp movl %esp, %ebp subl $16, %esp movl $0, -4(%ebp) cmpl $7, 8(%ebp) ja L2 movl 8(%ebp), %eax sall $2, %eax addl $L4, %eax movl (%eax), %eax jmp *%eax .section .rdata,"dr" .align 4https://www.cnblogs.com/marklove/p/14290443.html
----------------------------------------------
[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/