加载中…
个人资料
怪盗基德
怪盗基德
  • 博客等级:
  • 博客积分:0
  • 博客访问:3,457
  • 关注人气:9
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
博文
标签:

entrianattach

thread

cwinapp

分类: 计算机与 Internet

当用Visual Studio上的Entrian Attach插件后,发现用了,程序会出错,不用正常。区别在于AfxGetThread返回空。经过反复调试,发现区别在于用了Entrian Attach后,创建了一个新线程,而区别就在于这时进程初始化代码的CWinApp的子类也在这个新线程初始化,而不是main,当main thread代码

标签:

cmake

fortran

vs

intel-fortran-compil

分类: 计算机与 Internet

    项目中有fortran和c代码混编,以前不用cmake,现在想切到cmake,发现项目中用的老编译器,VS不认,不能同时编c和fortran。

    于是有了本文,网上找的方法,创建两个工程,A和AFortran,A依赖AFortran,AFortran生成所有fortran的obj,A把自己的c和AFortran生成的obj混合在一起产生动态库。

   function(add_neue_dyn_target)

    file(GLOB SOURCES '*.c' '*.cxx' '*.cpp' '*.f')

    add_library(${my_lib_name} SHARED ${SOURCES})

    if(UNIX)

       if(NOT ARGN)

          set_target_properties(${my_lib_name} PROPERTIES

              LINK_FLAGS '${LINK_FLAGS} -Wl,--no-undefined -Wl,--whole

标签:

docker

ubuntu

sources.list

分类: 计算机与 Internet

     因为要新装一个库,原来用ubuntu20.04为基的docker突然build失败了。

E: Unable to locate package libmrm4:i386

    发现同样的包在wsl中,可以安装成功,于是想到把能安装的那边的sources.list导过来。在dockerfile中加入

RUN echo '\

debhttp://deb.debian.org/debianbookwormmain\

debhttp://deb.debian.org/debianbookworm-updatesmain\

debhttp://security.debian.org/debian-securitybookworm-securitymain\

debhttp://ftp.debian.org/debianbookworm-backportsmain' >> /etc/apt/sources.list

   

标签:

vscode

plugin

bash-debug

分类: 计算机与 Internet

     现在开发在VDI中,不能访问外网,要装一个VSCode插件相当麻烦,于是要搞清楚它是怎么工作的,之前的方法都是下载VSIX然后安装,今天bash debug这个找不到安装包。

     方法是,在能访问外网的机器上,下载包,用everything查找关键字。

     Windows在C:\Users\\.vscode\extensions这个路径

     很明显能看到一个新的包,把这个文件夹拷贝到对应Windows上,直接就能用了。

     唯一要注意的是C:\Users\\.vscode\extensions\extensions.json这个文件,里面记录了当前工具所在的路径,猜测vscode就是根据这个文件了解当前哪些是已经安装的插件。

     现在要去Linux上安装这个包,拷贝进linux机器,路径在~/.vscode/extensions下。注意上面路径需要更新成linux本地路径。直接就可以用了。

标签:

python

pip

anytree

分类: 计算机与 Internet

由于目前公司政策规定,工作电脑不能上网,本来pip3 install anytree可以搞定的事情,需要在外部能上网的电脑先装,然后把文件夹拷贝到内部电脑再工作。

于是找到pip3 install anytree到底被装哪里了就显得很重要了。

import anytree

print(anytree.__file__)

这两行专门干这个事情

C:\Users\shiyang.chen\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\anytree

然后相应的去另一台机器,找个已经安装的库,找到要拷贝去的路径,拷贝上,就可以了。

标签:

python

shell

static

dumpbin

symbol

分类: 计算机与 Internet

由于项目有大量静态库,并且在Windows平台的实现和Linux有不少区别,因此需要在Windows平台也做一份符号依赖分析。

从静态库导出符号,这步需要借助dumpbin工具。

powershell实现

$originalPath = Get-Location

 

cd D:\Neuecax_Dynamic\olb

Remove-Item *.full_symbol -Force

Get-ChildItem z*.lib | ForEach-Object {

    $outputFile = '$($_

标签:

shell

symbol

maxdepth

cfilt

分类: 计算机与 Internet

目前在做依赖库时遇到问题,符号是Linux产生的,而现在要写windows上的def文件,直接拷贝不工作,所以要导成原始符号,再去Windows上匹配。

创建convertToRawSymbol.sh

#!/bin/sh

raw_symbol_file=$(basename $1 .T.json).raw_sym

jq -r '.[]' $1 | xargs -n 1 -P `nproc` c++filt > $raw_symbol_file

这需要安装jq库。

在外层进入symbols\result目录

cd result

find -maxdepth -name '*.T.json' xargs -n -P `nproc` ../convertToRawSymbol.sh

这样能把原始的json文件转成对应的raw_sym文件。

接下来需要把这些

标签:

symbol

shell

python

graphviz

分类: 计算机与 Internet

又来了个新公司,新产品用了1128个静态库。现在想做一个静态库依赖关系示意图。

想法,先输出所有符号,找出其中T和U的符号,在此基础上,去分析相互之间的引用关系。

先从.a到符号

find . -name '*.a' | xargs -P `nproc` -I {} sh -c 'nm {} > $(basename {} .a).full_symbol'

并行产生1128个文件。

每个里面形如

XXX.o:

          U undefinedFunc1

xxxx   T definedFunc2

xxxx   d/t symbol

这样的其他符号。

然后从一个full_symbol生成两个.USYM和.TSYM分别只包括U和T的符号

 

标签:

static

link

symbol

分类: 计算机与 Internet

创建main.cpp

int referencedFunctionA();

int main()

{

    std::cout << 'Hello World!\n';

    int ref = referencedFunctionA();

}

并实现一个静态库,包括两个文件a.cpp,b.cpp

int unresolvedExternalFunctionA();

// TODO: 这是一个库函数示例

int referencedFunctionA()

{

return 3;

}

int unreferenedFunction()

{

return unresolvedExternalFunctionA();

//return 5;

}

b.cpp

int referencedFunctionB()

{

return unresolvedExternalFunctionB();

}

下面谈结论

1. 主程序引用a.cpp中方法r

标签:

llvm

stringmap

分类: 计算机与 Internet

LLVM源码阅读之五 --- StringMap

今天来认识一下这个StringMap类,它是一个Map类,把String做Key,任意对象做Value

template AllocatorTy = MallocAllocator>

class StringMap : public StringMapImpl {

AllocatorTy Allocator;

public:

using MapEntryTy = StringMapEntry;

从StringMapImpl继承。

class StringMapImpl {

protected:

// Array of NumBuckets pointers to entries, null pointers are holes.

// TheTable[NumBuckets] contains a sentinel value for easy iteration. Followed

// by an array of the actual hash values as unsigned integers.

StringMapEntryBase **TheTable = nullptr;

unsigned NumBuckets = 0;

unsigned NumItems = 0;

unsigned NumTombstones = 0;

unsigned ItemSize;

它存了StringMapEntryBase的二级指针

 

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有