标签:
virtualcffexplorermsvc |
分类: 计算机与 Internet |
cmake_minimum_required(VERSION 3.26)
project(main)
add_library(BASE SHARED base.cpp)
target_compile_definitions(BASE PRIVATE MYLIBRARY_EXPORTS)
add_executable(main main.cpp derived.cpp)
标签:
__macosxxattr |
分类: 计算机与 Internet |
这次Notary失败,发现是某处多了__MACOSX的目录,里面是带树结构的隐藏文件以._开头。
这些隐藏文件通常Finder看不到,只有命令行能看到。而__MACOSX文件夹是可见的。
conanchen@ConanChen ~ % ls -al /Users/conanchen/Downloads/mac_uvsl_no_maxosx/__MACOSX
total 16
drwx------ 4 conanchen staff 128 Jan 23 00:05 .
drwxr-xr-x@ 9 conanchen staff 288 Jan 25 16:19 ..
-rw-r--r-- 1 conanchen staff 224 Nov 22 06:43 ._ReleaseNotes.txt
-rw-r--r-- 1 conanchen staff 224 Nov 22 06:43 ._ngspice-41-manual.pdf
这个目录里面大部分是AppleDobule文件(._开头),记录着一些扩展苹果属性。有些文件签名以后,数据存在这些meta数据中。
当用7z压缩时,它会把扩展属性转换成__MACOSX文件夹中带树结构的对应._文件并压入压缩包,
解压时,用7z能完全恢复,而用ditto时,则会跳过._开头文件,也就是ditto会丢失__MACOSX中的._文件。
__MACOSX文件夹会保留,最后结果就是__MACOSX文件夹还会在这。
当拷贝整个文件夹时,__MAC
标签:
notarysyspolicy_checknotary-submission |
分类: 计算机与 Internet |
最近提交的Notary失败,报错只显示
'message': 'The signature of the binary is invalid.',
最后发了TSI去苹果,最后得到的回复中显示,是带扩展属性的文件丢失,带这种属性的文件经过压缩和解压,就不见了。
然后签名的时候有它,最后提交的东西里解压出来没它,就报错了。
Autodesk Fusion/Autodesk Fusion 360.app: a sealed resource is missing or invalid
file missing: …/Autodesk Fusion/Autodesk Fusion 360.app/Contents/Libraries/Applications/Electron/LibEagle/ngspice/__MACOSX/share/ngspice/scripts/intel/._spinit
这时候错应该报a sealed resource is missing or invalid 而不是invalid signature
偷师苹果回复的邮件发现一个神命令syspolicy_check, 它其中的一个参数notary-submission就能用来检查Notary
syspolicy_check --notary-submission -vvv 文件名
可以得到更详细的输出。
conanchen@ConanChen ~ % syspolicy_check notary-submission sample.app
App has failed one or more pre-notarization checks.
-----------------
标签:
clangawkdebugsed |
分类: 计算机与 Internet |
clang
/Users/conanchen/hello.c用这样的方法来编译源文件的时候,clang内部会重新调用一次clang子程序,并且给出一串参数。
在Mac上调试一个未启动程序可以用wait的方法等待。
但问题是当前调试的正是clang,这个方法会因为当前有同样的程序在运行而失效。Windiows上有对应的插件和方法来解决,Mac当然也可以做类似的,
一直等待,查找和当前进程不相同的clang时,去attach,但是不那么直接。
为了解决这个问题,直接在clang启动新进程的地方打断点,把参数Trace出来,然后单独列成参数来启动新的clang。
具体代码在/Users/conanchen/llvm-project/clang/lib/Driver/Job.cpp
intCommand::Execute(ArrayRef<</span>std::optional<</span>StringRef>> Redirects,
标签:
readgrepshellpipe |
分类: 计算机与 Internet |
我们知道在Shell中,管道相当好用。但是如何让自己写的函数能支持管道,从之前的方法中得到输入,并执行是个问题。
经过实验,需要用read从管道中读取,然后使用。示例代码如下。
这里是最外层的调用
echo '##### Move Resources under Frameworks #####'
pushd ./Contents
if [ -d ./Frameworks/A360 ]
then
searchAndMoveResources ./Frameworks/A360
fi
popd
具体函数实现如下
searchAndMoveResources()
{
find $1 ! -name '*.dylib' -and ! -name '*.so' -and ! -name '.DS_Store' -and ! -name '*.a' -type f -print0 | xargs -P $NCPU -0 -L1 file | grep -v -E 'Mach-O .*' | cut -d ':' -f1 | movetoResources
}
movetoResources才是关键,它从管道中读取输入,然后执行。实现如下
movetoResources()
{
read source_file
while [[ ! -z $source_file ]]
do
标签:
shellfindxargsreadelffor |
分类: 计算机与 Internet |
项目需要Scan一下哪个库对Boost有符号依赖,在Linux上,所以想用python或shell来完成。
为了做到这个效果,决定还是用shell,因为一些查找需要find和readelf等命令。
#!/bin/bash
# Directory to search in
directory='/home/client-delivery/.neutron_3p'
# Find all folders in the specified directory
folder_paths=$(find $directory -name 'RuntimeRoots')
# Iterate over each folder path
for folder_path in $folder_paths; do
updated_folder_path='$folder_path/Release'
files_pathes=$(find $updated_folder_path -print0 -name '*.so' | xargs -0 -L1 file | grep 'ELF ' | cut -d ':' -f1)
for file_path in $files_pathes; do
#echo 'Checking $file_path'
sizes=$(readelf -s $file_path | grep boost |
标签:
codesignunknown_0x32invalid-size |
分类: 计算机与 Internet |
在运行Mac程序时,在Xcode中运行,签名不被检查,直接双击会报错。
open ~/Library/Logs/DiagnosticReports/ 可以找到过去的错误日志。
大概率得到下面这串,在当时直接弹出的Report中有一样的内容。
发现其中最有用的是 ---> mapped file 102d14000-102e18000 [ 1040K] r--/rwx SM=COW ...t_id=5e1b0559
这行中的1040K
在目录中用
find . -size +1040k -size -1050k
或者
find . -size +1M -size -2M
来找对应大小的二进制文件
在列表中通常就能找出原因了。
chencon@ADSKDQJQR0H4DT Release % find . -size +85M -size -86M
./Frameworks/MeshMixer/libmmsdk.dylib
-------------------------------------
Translated Report (Full Report Below)
-------------------------------------
Process: Autodesk Fusion 360 [74251]
Path: /Users/USER/*/Autodesk Fusion 360.app/Contents/M
标签:
permissiveconstexprstatic_assert |
分类: 计算机与 Internet |
项目中遇到一个情况,当使用find_package去引用Qt以后,编译失败了。
原因是Qt那会自动引入/permissive选项。编译时,有没有这个选项,会造成结果不同。
代码如下:
template static constexpr AVKTypeTag of()
{
if constexpr (std::is_same_v)
{
return {ID::nil};
}
else if constexpr (std::is_same_v)
{
return {ID::f32};
}
.....
else
{
#ifdef __APPLE__
#else
static_assert(false, 'invalid type');
#endif
}
}
constexpr本意是用来在编译时决定表达式的值,然后编译的时候就知道是用的哪个分支,在优化时,可以直接生成对应的代码。
但是并不是编译时,选择性编译,也就是说if里的表达式是真,并不代表不再编译else分支。
而上面代码明显是写成了这个意图,搞混了编译时和运行时。static_assert(false)
这种代码永远是错的。
那为撒去掉了苹果,在Windows上有时候能
标签:
--mime-encodingiconvodhexdump |
分类: 计算机与 Internet |
这次做性能测试,结果文件是xml,但是antlr读取好像遇到问题,于是查看编码
conanchen@ConanChen ~ % file --mime-encoding /Users/conanchen/Desktop/PerformanceReport/2.1.284_macOS\ 13.0_20230317183825_PerformanceResult.xml
/Users/conanchen/Desktop/PerformanceReport/2.1.284_macOS 13.0_20230317183825_PerformanceResult.xml: utf-16le
conanchen@ConanChen ~ % iconv -f utf-16le -t utf-8 /Users/conanchen/Desktop/PerformanceReport/2.1.284_macOS\ 13.0_20230317183825_PerformanceResult.xml >> utf-8.xml
conanchen@ConanChen ~ % file --mime-encoding utf-8.xml
utf-8.xml: utf-8
用iconv就能把文件转换格式。
用od或hexdump可以显示出文件头内容
conanchen@ConanChen ~ % od -Ax -t x1 -N 16 /Users/conanchen/utf-8.xml
0000000 ef bb bf 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e
0000010
conanchen@ConanChen ~ % od -Ax -t x1 -N 16 /Users/conanchen/Desktop/PerformanceReport/2.1.284_macOS\ 13.0_2
标签:
datey((datey-1)) |
分类: 计算机与 Internet |
由于我们的repo上分支太多,需要到对应的JenkinsJob查看任务。每次手动太累了。于是想自动化,但是发布分支有多个,于是想自动根据年份筛选。
conanchen@ConanChen client-delivery % date +%y
23
date +%y可以显示出当前的年份
问题在于我们的分支是
remotes/origin/release/2208.0
remotes/origin/release/2208.1
22财年,于是。
conanchen@ConanChen client-delivery % git branch -a | grep -E 'remotes/origin/release/22|remotes/origin/release/23'
remotes/origin/release/2208.0
remotes/origin/release/2208.1
类似实现上面的功能,22和23需要用date +%y来替代。
conanchen@ConanChen client-delivery % echo $((`date +%y`-1))
22
$((`date +%y`-1))能用来替换去年。
结合起来
set getBranchCommand to 'cd $HOME/client-delivery;git branch -a |
grep -E \'remotes/origin/' & branchPrefix & '/`date +%y`| remo