小编War*_* P的帖子

这些Dsymutil警告在XCode 4.5中意味着什么?

我正在连接iOS的静态框架和armv7 ios 6应用程序,我怀疑原始二进制文件来自XCode 3.x并使用GCC编译,我现在使用CLang编译器链接它.我没有框架的源代码,只有二进制文件:

(null): warning: (armv7) /.../DerivedData/.../armv7/HardwareObjectFile.o unable to open object file
Run Code Online (Sandbox Code Playgroud)

我得到69个警告,如上所述,每个.o文件链接到静态框架.

这个警告是否因任何原因而严重?我已经简化了巨大的路径,这似乎表明库中的二进制文件已经硬编码了"/ Users/somedeveloperthatisntme"中的路径,这条路径几乎无法帮助但不存在,因为我在不连接的计算机上使用此库有一个名为"Users/somedeveloperthatisntme"的文件夹.

Dsymutil似乎是一个"操作存档的DWARF调试符号文件"的工具,虽然我完全不知道它是什么以及它做了什么,尽管Apple提供了全面的文档,它告诉我什么,但从来没有,为什么.它在做什么,这个警告对我意味着什么?我怀疑我需要一个来自供应商的新库/静态框架来清除它?

更新:我无法解决这个问题,看起来原因是由非常旧的XCODE版本编译的非常旧的二进制文件,作为移动框架的一部分从第三方供应商提供.在这种情况下的问题将通过让供应商重建他们的库来解决,我要求他们这样做,因为这些警告让我疯狂,但他们似乎无法做到.最后,我抛弃了他们的技术并用其他东西取而代之.(GRIN)

xcode ios dsymutil xcode4.5

13
推荐指数
3
解决办法
8583
查看次数

Qt是如何工作的(确切地说)?

使用Qt编写应用程序时,是否可以立即在不同的操作系统中运行?并且(如果我错了,请纠正我)您不需要在要执行应用程序的所有不同平台上安装Qt吗?

这究竟是如何工作的?Qt是否编译到所需的平台,或者是否捆绑了一些"dll"(libs),或者它是如何做到的?它是否与编写跨平台运行的Java应用程序不同.

如果您使用Python编写带有Python绑定的Qt应用程序,您的最终用户是否需要安装Python?

python qt

12
推荐指数
3
解决办法
2713
查看次数

Http Post与indy

我的Web服务器上有一个简单的PHP脚本,我需要使用HTTP POST上传文件,我在Delphi中这样做.

这是我与Indy的代码,但另外它不起作用,我无法弄清楚我做得不好.如何查看我在服务器上发送的内容是否有这样的工具?

procedure TForm1.btn1Click(Sender: TObject);
var
  fname : string;
  MS,dump : TMemoryStream;
  http  : TIdHTTP;

const
  CRLF = #13#10;
begin
  if PromptForFileName(fname,'','','','',false) then
  begin
    MS := TMemoryStream.Create();
    MS.LoadFromFile(fname);
    dump := TMemoryStream.Create();
    http := TIdHTTP.Create();
    http.Request.ContentType:='multipart/form-data;boundary =-----------------------------7cf87224d2020a';
    fname := CRLF + '-----------------------------7cf87224d2020a' + CRLF + 'Content-Disposition: form-data; name=\"uploadedfile\";filename=\"test.png"' + CRLF;
    dump.Write(fname[1],Length(fname));
    dump.Write(MS.Memory^,MS.Size);
    fname := CRLF + '-----------------------------7cf87224d2020a--' + CRLF;
    dump.Write(fname[1],Length(fname));
    ShowMessage(IntToStr(dump.Size));
    MS.Clear;
    try
    http.Request.Method := 'POST';
    http.Post('http://posttestserver.com/post.php',dump,MS);
    ShowMessage(PAnsiChar(MS.Memory));
    ShowMessage(IntToStr(http.ResponseCode));
    except
    ShowMessage('Could not bind socket');
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi post http indy

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

使用Delphi以递归方式删除所有文件和文件夹

我试图以递归方式删除文件夹及其所有子文件夹,但它根本不起作用,所以有人可以检查代码并告诉我这里做错了什么吗?

我在Windows XP下通过D7运行此代码

if FindFirst (FolderPath + '\*', faAnyFile, f) = 0 then
      try             
         repeat

            if (f.Attr and faDirectory) <> 0 then
              begin
                    if (f.Name <> '.') and (f.Name <> '..') then
                      begin                            
                        RemoveDir(FolderPath +'\'+ f.Name);
                      end
                    else
                      begin
                        //Call function recursively...
                        ClearFolder(FolderPath +'\'+ f.Name, mask, recursive);
                      end;
              end;

         until (FindNext (f) <> 0);
      finally
        SysUtils.FindClose (f)
      end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7

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

解决BPL无法加载但仍已重新编译的Delphi BPL包问题(Windows VirtualStore文件系统问题)

我的一般问题是你如何排除故障"我的BPL不会因为依赖而无法加载,无论我清理和重新编译多少". 更新你可能认为你有一个干净的重新编译系统,但由于Windows的反奇迹及其文件系统虚拟化错误功能,你还没有.

当我尝试将我的设计时包(在本例中命名dclFsTee.bpl)加载到我的Delphi IDE中时(它是快速报告4 teechart包装器组件包),它抱怨:

The program can't start because tee7100.bpl is missing from your computer. Try reinstalling ...
Run Code Online (Sandbox Code Playgroud)

tee7100.bpl是不是在我的系统上的任何DCP或DCU文件,我知道引用.但显然,有些事情是错的,我找不到问题.

所有Delphi用户都面临着一百个"不会编译或不会加载"BPL问题.当被问及做什么时,通用副词是清理您的计算机.

但是,我现在花了几个小时来清理我的计算机,虽然一切都编译了文件,但显然必须有某些东西过时隐藏,因为我试图加载的结果BPL文件仍然想加载一个版本的几天前我从这个系统中删除的TeeChart BPL,以及我能找到的每一条痕迹.

我删除的Delphi 2007中的TeeChart内容包括$(BDS)\ Lib和$(BDS)\ Lib\debug文件夹中的所有内容,以及系统上的所有DCP和BPL文件夹.此外,每个名为TeeChart-unit的dcu文件都已消失.

一旦你走到了尽头,你接下来会尝试什么?(格式化硬盘,购买新电脑.)说真的.我认为我是一个聪明的人,但我有一个1 Tb的硬盘驱动器,一个运行到80多个文件夹的库路径,以及一个似乎组织良好的源代码存储库,但显然有些东西隐藏在我不能的地方找到它.

我有完整源代码的TeeChart Standard 2012,据我所知,我的开发机器不再包含delphi附带的"tee chart tee7100.bpl"版本的旧TeeChart BPL或DCP文件.

我已经运行了teechart附带的"recompile.exe"向导,在向tee.inc文件写入{$ DEFINE x}声明后,它似乎只运行MSBuild并构建包(源代码中有两个)分配).

但是,不知何故,似乎默认情况下,其中一个隐式导入到其中一个软件包中的是一些尚未重建的过时文件,因此会尝试加载tee7100.bpl.新的bpl名称是tee911.bpl.

而不是问一些非常具体的快速报告问题,我只是提到它是一个特定的伤害世界的例子,我在Delphi开发时遇到了几十次.

我只给出了快速报告的详细信息,这样你就可以看到这实际上是一个普通问题的特定实例,当处理组件源代码或包或带有依赖关系的包时,有时会在Delphi IDE中面临这个问题. .清理您的计算机,以便您的代码甚至构建可能是棘手的.

所以这是我的Delphi包到包依赖解析问题:

  1. 找到或跟踪隐藏加载一些不再需要的BPL问题的最有效方法是什么,这样我的代码(构建和编译就好了!)实际上会加载到Delphi IDE中.运行重新编译产生的BPL文件似乎正确链接到正确的DCP文件,并且不存在旧的/陈旧的DCP或DCU文件.例如,新的DCP文件名是tee911.dcp.

  2. 你能以某种方式得到任何关于什么包实际上是陈旧的,以及在.bpl链接时正在读取和链接以及静态导入的内容吗?(我想可能像BPL文件的特殊MAP类文件?)

更新经过几个小时的战斗,并使用我所知道的每一个技巧,我意识到我没有检查VirtualStore过Windows 7中文件虚拟化引起的一些相关问题.这意味着Windows 7依赖于运行在它上面的程序.它为您提供了该文件的另一个版本,而不是您想要的版本.这在几个方面可能是致命的; 一; 你重新编译了一个BPL,但那不是加载的.杀死我的BPL位于SysWow64文件夹中,该文件夹是VirtualStore的一部分.请注意,虚拟存储基本上会出现幻像文件,只有当你是一个特定的"低级别"程序时才会出现,其中Delphi 2007在Win7/64位上显然是这样.要删除当前用户帐户的SysWow64 VIRTUALSTORE文件夹中的BPL文件,请执行以下操作:

   del %HOMEPATH%\AppData\Local\VirtualStore\Windows\SysWow64\*.bpl
Run Code Online (Sandbox Code Playgroud)

...有些日子我只讨厌Windows架构.无论如何,我不打算将上述内容作为答案,因为我想知道是否有人有更好的方法或任何可能有助于下次的提示或建议.

delphi dependencies bpl

12
推荐指数
1
解决办法
3万
查看次数

去掉select select querystring属性/值对,这样varnish就不会改变它们的缓存

我的目标是将某些查询字符串属性及其值"白名单",以便清除不会改变网址之间的缓存.

例:

Url 1: http://foo.com/someproduct.html?utm_code=google&type=hello  
Url 2: http://foo.com/someproduct.html?utm_code=yahoo&type=hello  
Url 3: http://foo.com/someproduct.html?utm_code=yahoo&type=goodbye
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我想将"utm_code"列入白名单,但不要"输入".因此,在第一个网址被点击后,我希望varnish将缓存的内容提供给第二个网址.

但是,在第三个url的情况下,属性"type"值不同,因此应该是清漆缓存未命中.

我已经尝试了下面的两种方法(在我现在找不到的drupal帮助文章中找到)似乎不起作用.可能是因为我有正则表达式错误.

# 1. strip out certain querystring values so varnish does not vary cache.
set req.url = regsuball(req.url, "([\?|&])utm_(campaign|content|medium|source|term)=[^&\s]*&?", "\1");
# get rid of trailing & or ?
set req.url = regsuball(req.url, "[\?|&]+$", "");

# 2. strip out certain querystring values so varnish does not vary cache.
set req.url = regsuball(req.url, "([\?|&])utm_campaign=[^&\s]*&?", "\1");
set req.url = regsuball(req.url, "([\?|&])foo_bar=[^&\s]*&?", "\1");
set req.url = regsuball(req.url, "([\?|&])bar_baz=[^&\s]*&?", "\1");
# get …
Run Code Online (Sandbox Code Playgroud)

regex varnish query-string varnish-vcl

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

Delphi XE2:调试器关闭7-20行,编译器错误行号也相同

我有一个大型Delphi代码库的问题,我在那里工作,从Delphi 2007移植到XE2的副作用,我们现在遇到以下奇怪的相关问题:

  • 即使在调试版本中,也无法设置断点或单步执行代码,因为行编号全部搞乱,仅在某些单元中.

  • 故意在2010行引入语法错误将导致光标聚焦在第2020行,给出或取3或4行,如下所示:

.

 procedure Correct;
 begin
    DoSomething; // syntax error reported HERE but the real error is below.
    // more stuff here.
 end;

 procedure OllKorrect;  
 begin
        ThisLineIsFine();
        __VARIABLE_NOT_DEFINED__ := 1; // intentional error
 end
Run Code Online (Sandbox Code Playgroud)

我希望有人见过这个.问题的要素可能包括:

该代码包含许多奇怪的编译器指令,如{$ REALCOMPATIBILITY ON}和{$ H - }/{$ H +}指令,代码中有数千个{$ H +}/{$ H-}指令.

其次,代码使用了很多{$ I INCLUDE}指令,我怀疑包含文件可能会直接搞乱编译器的行编号.

我无法肯定地说,但我怀疑所有这些旧的"让它像turbo pascal for DOS"编译器开关是背后的原因.我想知道是否有人肯定知道这件事.它只发生在代码中的某些地方,并且项目有500多个单元,其中一些达到10K/20KLOC,这绝对令人沮丧.我可以说的是,不仅有{$ I include.inc}指令的单位搞砸了,而且包含大量{$ H - }/{$ H +}或{$ REALCOMPATIBILITY}指令的许多单位都做了没有这个问题.如果我能看出行为不端的单位有什么共同之处,我可以想出来.

更新:线路终止问题是有道理的.我运行此代码检测到问题.修复代码已注释掉,因为如果您取消注释并删除所有源代码,那就是您的问题.它正在将非unicode文件加载到unicode TStringList中并将其保存回来.这在我的世界中没问题,因为它的所有版本都受到控制和备份.你的旅费可能会改变.

program linefeedsProject1;

{$APPTYPE CONSOLE}

uses
  IOUtils,
  Classes,
  Types,
  SysUtils;


  var
    broken,notBroken:Integer;

  function fix(filename:String):Boolean;
  var
    sl:TStringList; …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2

12
推荐指数
2
解决办法
1822
查看次数

如何在Gitlab CI中建立手动阶段?

我似乎无法在版本8.9中的Gitlab CI中找到任何手动登台的文档.如何进行"部署测试"等手动阶段?

我希望Gitlab CI将一个成功的RPM部署到开发人员,然后在我审阅之后,推送到Test,然后从那里生成一个版本.目前Gitlab CI可以实现吗?

gitlab gitlab-ci

12
推荐指数
3
解决办法
1万
查看次数

我可以修改RTL类System.Classes.TStream中的常量并在运行时在Delphi XE6中重建它吗?

我正在尝试解决System.Classes.pas中一个已知的丑陋性能限制,它具有20世纪80年代的常量缓冲区限制($ F000),如下所示:

function TStream.CopyFrom(const Source: TStream; Count: Int64): Int64;
const
  MaxBufSize = $F000;
....
Run Code Online (Sandbox Code Playgroud)

这导致我们的Delphi应用程序遭受重大性能损失.在delphi XE2到XE5中,我们能够修改它并使用以下方法之一:

  • 我可以修改Delphi源代码,然后通过从批处理文件调用dcc32.exe,重建Delphi库文件夹中的System.Classes.dcu文件.我意识到这很难看,我不喜欢这样做,但我不喜欢RTL中这个丑陋的性能问题,而且我们的用户无法忍受它带来的性能问题.

  • 我可以尝试在我的项目搜索路径中的某处放置一个经过修改的system.classes.pas文件.

现在,在Delphi XE6中,上述两种方法都不适合我,这可能要归功于一些内部编译器的更改.我在其uses子句中包含System.Contnrs的最小命令行应用程序中得到的错误是:

[dcc32 Fatal Error] System.Classes.pas(19600): F2051 Unit System.Contnrs was compiled with a different version of System.Classes.TComponent
Run Code Online (Sandbox Code Playgroud)

重现此问题的示例程序(假设您已修改了System.Classes.pas并更改了MaxBufSize常量),如下所示:

program consoletestproject;

{$APPTYPE CONSOLE}

{$R *.res}

uses
   System.Contnrs,
   System.SysUtils;

var
  List:System.Contnrs.TObjectList;
begin
   WriteLn('Hello world');
end.
Run Code Online (Sandbox Code Playgroud)

同样,这个问题在Delphi XE6中很容易重现,但在XE5或更早版本中不是问题.

当您绝对必须使用System.Classes.pas或System.SysUtils.pas或其他一些非常低级别单元的修改副本解决基本RTL或VCL限制时,建议的做法是什么?(是的,我知道如果你不必这样做,你就不应该这样做,不要为讲课而烦恼.)

是否有一组神奇的命令行参数可以通过命令行中的"dcc32.exe"使用,以生成一个修改后的DCU,它将与上面的应用程序示例正确链接?

作为第二个问题,是否有.dcu文件没有源存在,当一个人尝试这样做时会破坏,在这种情况下,上述所有的答案是,"你无法解决这个问题,如果有一个bug在RTL中,你运气不好"?

一种可能的解决方法是在项目搜索路径(或库路径)中包含"$(BDS)\ source\rtl\common",强制每个损坏的(需要重新编译)DCU重建每个时间,但这看起来很丑陋和错误.

delphi delphi-xe6

11
推荐指数
2
解决办法
957
查看次数

.NET Core 1.0中的System.Environment

有谁知道如何在.NET Core中获取有关当前环境和平台的信息?目前Core库中没有Environment类.

在此输入图像描述

.net c# .net-core

11
推荐指数
1
解决办法
4965
查看次数