<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[vergiss's space]]></title><description><![CDATA[Hi, welcome!]]></description><link>https://vergiss.cn</link><generator>Yohaku (https://github.com/Innei/Yohaku)</generator><lastBuildDate>Wed, 23 Sep 2026 22:30:28 GMT</lastBuildDate><atom:link href="https://vergiss.cn/feed" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Sep 2026 22:30:28 GMT</pubDate><language><![CDATA[zh-CN]]></language><item><title><![CDATA[blog迁移中]]></title><description><![CDATA[<div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://vergiss.cn/notes/1">https://vergiss.cn/notes/1</a></blockquote><span>中间好几个月没有维护了，今天重新构建了起来，计划之后逐渐将前面的尚有价值的博客迁移过来</span><p style="text-align:right"><a href="https://vergiss.cn/notes/1#comments">览毕，何不一言？</a></p></div>]]></description><link>https://vergiss.cn/notes/1</link><guid isPermaLink="true">https://vergiss.cn/notes/1</guid><dc:creator><![CDATA[vergiss]]></dc:creator><pubDate>Fri, 11 Sep 2026 06:17:15 GMT</pubDate></item><item><title><![CDATA[CGAL库在Windows下的安装与配置]]></title><description><![CDATA[<link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/11/6739c766cea72.png"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://vergiss.cn/posts/cpp/cgal-windows">https://vergiss.cn/posts/cpp/cgal-windows</a></blockquote><div><p>CGAL库是一个强大的开源工具，以C++库的形式为开发者提供了高效可靠的几何算法。最近再一次使用到这个库，在新的环境下重新配置了一番，发现里面还是有很多丰富的、值得研究的功能的，遂记录下其在Windows下的安装与配置流程。</p><h2 id="cgal">一、获取CGAL源码</h2><p>我们可以在CGAL的GitHub仓库的<a href="https://github.com/CGAL/cgal/releases/tag/v6.0.1">release页面</a>中下载到最新版本的源码压缩包<code>CGAL-6.0.1.zip</code>，将其解压，放在一个合适的位置。</p><p>然后需要添加一个环境变量<code>CGAL_DIR</code>，值为源码所在的路径，如<code>D:\MyInclude\cpp\CGAL-6.0.1</code></p><h2 id="boost">二、安装Boost</h2><p>Boost是CGAL的强制依赖项，二进制版本的Boost可以在<a href="https://sourceforge.net/projects/boost/files/boost-binaries/">SourceForge</a>上找到，这里我们下载的是<code>boost_1_86_0-msvc-14.1-64.exe</code>，下载好后运行程序即可将Boost安装在你指定的位置，这里我将它安装在了<code>D:\MyInclude\cpp\boost_1_86_0</code></p><p>安装好后我们需要设置两个环境变量分别指向库和头文件路径</p><ul><li><code>BOOST_LIBRARYDIR = D:\MyInclude\cpp\boost_1_86_0\lib64-msvc-14.3</code></li><li><code>BOOST_INCLUDEDIR = D:\MyInclude\cpp\boost_1_86_0</code></li></ul><blockquote><p>一般来说设置这两个环境变量就足以让cmake找到Boost，如果在之后的编译中提示无法找到Boost，可以尝试添加一个额外的环境变量<code>BOOST_ROOT = D:\MyInclude\cpp\boost_1_86_0</code></p></blockquote>
<p>这将使cmake能够找到Boost。</p><p>此外，需将dll所在文件夹的路径（<code>D:\MyInclude\cpp\boost_1_86_0\lib64-msvc-14.3</code>）添加到PATH环境变量中</p><blockquote><p>tip：上述路径请根据自身情况调整</p></blockquote>
<h2 id="gmpmpfr">三、安装GMP和MPFR</h2><p>GMP和MPFR同样是CGAL所必需的依赖项，在CGAL的release页面我们可以找到作者提供的预编译版本（<a href="https://github.com/CGAL/cgal/releases/download/v6.0.1/CGAL-6.0.1-win64-auxiliary-libraries-gmp-mpfr.zip">CGAL-6.0.1-win64-auxiliary-libraries-gmp-mpfr.zip</a>）下载后解压到CGAL的目录中，这样cmake便能够自动检测这些依赖项。</p><blockquote><p>tip：CGAL目录下有文件夹auxiliary，这个压缩包解压出来后也是一个文件夹auxiliary，将其移动过去本质上就是把这个文件夹里的东西放到CGAL\auxiliary文件夹中。</p></blockquote>
<p>此时，我们便完成了CGAL及其所有必需依赖项的安装。</p><h2 id="cmakecgal">四、通过CMake使用CGAL</h2><p>通过在<code>CMakeLists.txt</code>中添加如下语句，便可将程序与CGAL链接起来</p><pre class="language-cmake lang-cmake"><code class="language-cmake lang-cmake">find_package(CGAL REQUIRED)
add_executable(my_executable my_source_file.cpp)
target_link_libraries(my_executable CGAL::CGAL)
</code></pre>
<p>CGAL库中的其他组件也是类似地进行链接，如CGAL_core</p><pre class="language-cmake lang-cmake"><code class="language-cmake lang-cmake">find_package(CGAL REQUIRED COMPONENTS Core)
target_link_libraries(my_executable CGAL::CGAL CGAL::CGAL_Core)
</code></pre>
<h2 id="cgalqt6">五、使用CGAL+Qt6的示例</h2><p>这里展示了一个使用CGAL和Qt6实现的一些GUI功能的程序演示（前提是安装了Qt6）</p><p>CMakeLists.txt：</p><pre class="language-cmake lang-cmake"><code class="language-cmake lang-cmake">cmake_minimum_required(VERSION 3.20.0)
project(Surface_mesh_Examples)

#CGAL_Qt6 is needed for the drawing.
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)

#create the executable of the application
create_single_source_cgal_program(&quot;draw_surface_mesh.cpp&quot;)

if(CGAL_Qt6_FOUND)
  #link it with the required CGAL libraries
  target_link_libraries(draw_surface_mesh PUBLIC CGAL::CGAL_Basic_viewer)
endif()
</code></pre>
<p>draw<em>surface</em>mesh.cpp：</p><pre class="language-cpp lang-cpp"><code class="language-cpp lang-cpp">#include &lt;CGAL/Simple_cartesian.h&gt;
#include &lt;CGAL/Surface_mesh.h&gt;
#include &lt;CGAL/draw_surface_mesh.h&gt;
#include &lt;fstream&gt;
 
typedef CGAL::Simple_cartesian&lt;double&gt;                       Kernel;
typedef Kernel::Point_3                                      Point;
typedef CGAL::Surface_mesh&lt;Point&gt;                            Mesh;
 
int main(int argc, char* argv[])
{
  const std::string filename = (argc&gt;1) ? argv[1] : CGAL::data_file_path(&quot;meshes/elephant.off&quot;);
 
  Mesh sm;
  if(!CGAL::IO::read_polygon_mesh(filename, sm))
  {
    std::cerr &lt;&lt; &quot;Invalid input file: &quot; &lt;&lt; filename &lt;&lt; std::endl;
    return EXIT_FAILURE;
  }
 
  // Internal color property maps are used if they exist and are called &quot;v:color&quot;, &quot;e:color&quot; and &quot;f:color&quot;.
  auto vcm = sm.add_property_map&lt;Mesh::Vertex_index, CGAL::IO::Color&gt;(&quot;v:color&quot;).first;
  auto ecm = sm.add_property_map&lt;Mesh::Edge_index, CGAL::IO::Color&gt;(&quot;e:color&quot;).first;
  auto fcm = sm.add_property_map&lt;Mesh::Face_index&gt;(&quot;f:color&quot;, CGAL::IO::white() /*default*/).first;
 
  for(auto v : vertices(sm))
  {
    if(v.idx()%2)
    { put(vcm, v, CGAL::IO::black()); }
    else
    { put(vcm, v, CGAL::IO::blue()); }
  }
 
  for(auto e : edges(sm))
  { put(ecm, e, CGAL::IO::gray()); }
 
  put(fcm, *(sm.faces().begin()), CGAL::IO::red());
 
  // Draw!
  CGAL::draw(sm);
 
  return EXIT_SUCCESS;
}
</code></pre>
<p>编译生成后，注意需在生成的可执行程序<code>draw_surface_mesh.exe</code>所在路径下执行以下命令，将此程序所需的Qt6的dll文件自动复制过来</p><pre class="language-shell lang-shell"><code class="language-shell lang-shell">windeployqt.exe ./draw_surface_mesh.exe
</code></pre>
<p>并手动将gmp的dll文件<code>gmp-10.dll</code>复制过来</p><p>然后运行程序便有如下GUI显示</p><p><img alt="1731839844350.png" height="607" src="https://image.vergiss.cn/i/2024/11/6739c766cea72.png" width="633"/></p></div><p style="text-align:right"><a href="https://vergiss.cn/posts/cpp/cgal-windows#comments">览毕，何不一言？</a></p></div>]]></description><link>https://vergiss.cn/posts/cpp/cgal-windows</link><guid isPermaLink="true">https://vergiss.cn/posts/cpp/cgal-windows</guid><dc:creator><![CDATA[vergiss]]></dc:creator><pubDate>Sun, 22 Jun 2025 17:17:00 GMT</pubDate></item><item><title><![CDATA[YAML与JSON（一）：格式详解]]></title><description><![CDATA[<link rel="preload" as="image" href="https://image.vergiss.cn/i/2025/06/683e994ddaeea.png"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://vergiss.cn/posts/cpp/yaml-json">https://vergiss.cn/posts/cpp/yaml-json</a></blockquote><div><p>在日常开发中，数据序列化和配置管理几乎无处不在。YAML和JSON作为两种主流的数据交换格式，各有特色和适用场景。本文将从格式规范入手，深入解析这两种数据格式的特点。</p><h2 id="json">一、JSON格式解析</h2><h3 id="json">JSON格式规范</h3><p>JSON（JavaScript Object Notation）是一种轻量级的数据交换格式，基于JavaScript的对象字面量语法，但完全独立于编程语言。</p><blockquote><p>文件后缀为<code>.json</code></p></blockquote>
<h4 id="json">JSON语法规则</h4><ul><li>数据结构是键值对</li><li>键必须用双引号包裹</li><li>值可以是任意 JSON 支持的数据类型</li><li>键值对之间用逗号分隔</li><li>对象用大括号 <code>{}</code>，数组用方括号 <code>[]</code></li><li>字符串只能用双引号，不能用单引号</li><li>不支持注释</li><li>不能有多余的逗号</li></ul><h4 id="">基本数据类型</h4><p>JSON支持六种基本数据类型：</p><h5 id="1-string"><strong>1. 字符串（String）</strong></h5><pre class="language-json lang-json"><code class="language-json lang-json">{
    &quot;name&quot;: &quot;John Doe&quot;,
    &quot;description&quot;: &quot;这是一个包含中文的字符串&quot;,
    &quot;escaped&quot;: &quot;包含\&quot;引号\&quot;和\\反斜杠的字符串&quot;
}
</code></pre>
<h5 id="2-number"><strong>2. 数字（Number）</strong></h5><pre class="language-json lang-json"><code class="language-json lang-json">{
    &quot;integer&quot;: 42,
    &quot;negative&quot;: -17,
    &quot;float&quot;: 3.14159,
    &quot;scientific&quot;: 1.23e-4,
    &quot;zero&quot;: 0
}
</code></pre>
<h5 id="3-boolean"><strong>3. 布尔值（Boolean）</strong></h5><pre class="language-json lang-json"><code class="language-json lang-json">{
    &quot;enabled&quot;: true,
    &quot;disabled&quot;: false
}
</code></pre>
<h5 id="4-null"><strong>4. 空值（null）</strong></h5><pre class="language-json lang-json"><code class="language-json lang-json">{
    &quot;empty_value&quot;: null
}
</code></pre>
<h5 id="5-object"><strong>5. 对象（Object）</strong></h5><pre class="language-json lang-json"><code class="language-json lang-json">{
    &quot;person&quot;: {
        &quot;name&quot;: &quot;Alice&quot;,
        &quot;age&quot;: 30,
        &quot;address&quot;: {
            &quot;city&quot;: &quot;Beijing&quot;,
            &quot;country&quot;: &quot;China&quot;
        }
    }
}
</code></pre>
<h5 id="6-array"><strong>6. 数组（Array）</strong></h5><pre class="language-json lang-json"><code class="language-json lang-json">{
    &quot;numbers&quot;: [1, 2, 3, 4, 5],
    &quot;mixed&quot;: [&quot;string&quot;, 42, true, null],
    &quot;nested&quot;: [
        {&quot;id&quot;: 1, &quot;name&quot;: &quot;Item 1&quot;},
        {&quot;id&quot;: 2, &quot;name&quot;: &quot;Item 2&quot;}
    ]
}
</code></pre>
<h3 id="json">JSON的优势与局限</h3><p><strong>优势：</strong></p><ul><li>语法简单，容易读写</li><li>生态好，几乎所有语言都支持</li><li>传输体积小，效率高</li><li>和 JavaScript 天然兼容</li></ul><p><strong>局限：</strong></p><ul><li>不能写注释，配置文档化不方便</li><li>类型有限，比如没有日期、二进制</li><li>不支持引用和继承</li><li>大型配置文件可读性较差</li></ul><h2 id="yaml">二、YAML格式深度解析</h2><h3 id="yaml">YAML格式规范</h3><p>YAML（YAML Ain&#x27;t Markup Language）是一种人类友好的数据序列化标准，设计目标是既容易被人类阅读，又容易被机器解析。</p><blockquote><p>文件后缀为<code>.yaml</code>或<code>.yml</code></p></blockquote>
<h4 id="yaml">YAML语法规则</h4><ul><li>使用缩进表示层级关系（通常为2个空格，不允许使用Tab）</li><li>键值对通过冒号 <code>:</code> 分隔，冒号后需有空格</li><li>列表项以短横线 <code>-</code> 开头，后跟空格</li><li>字符串可不加引号，包含特殊字符时可用单引号或双引号</li><li>支持注释，使用 <code>#</code> 表示</li><li>支持多行字符串（<code>|</code> 保留换行，<code>&gt;</code> 折叠换行）</li><li>支持锚点（<code>&amp;</code>）和引用（<code>*</code>）</li><li>支持合并键（<code>&lt;&lt;</code>）</li><li>支持多文档（用 <code>---</code> 分隔）</li><li>对缩进敏感，缩进不一致会导致解析错误</li></ul><h4 id="">基本语法特性</h4><h5 id="1-"><strong>1. 缩进表示层次结构</strong></h5><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">database:
  host: localhost
  port: 5432
  credentials:
    username: admin
    password: secret123
</code></pre>
<h5 id="2-"><strong>2. 列表表示</strong></h5><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml"># 使用短横线表示列表项
fruits:
  - apple
  - banana
  - orange

# 或者使用行内格式
colors: [red, green, blue]

# 嵌套列表
shopping_list:
  - name: groceries
    items:
      - milk
      - bread
      - eggs
  - name: electronics
    items:
      - phone
      - laptop
</code></pre>
<h5 id="3-"><strong>3. 标量数据类型</strong></h5><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml"># 字符串
name: John Doe
description: &quot;包含特殊字符的字符串&quot;
multiline: |
  这是一个多行字符串
  第二行内容
  第三行内容

folded_string: &gt;
  这是一个折叠字符串，
  多行会被合并成一行，
  除非有空行。

# 数字
age: 30
price: 99.99
scientific: 1.23e-4

# 布尔值
enabled: true
disabled: false
yes_value: yes
no_value: no

# 空值
empty_value: null
tilde_null: ~

# 日期时间
date: 2024-01-15
datetime: 2024-01-15T10:30:00Z
</code></pre>
<h5 id="4-"><strong>4. 复杂数据结构</strong></h5><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml"># 映射（字典）
person:
  name: Alice
  age: 25
  hobbies:
    - reading
    - swimming
  address:
    street: 123 Main St
    city: Beijing

# 锚点和引用
defaults: &amp;default_settings
  timeout: 30
  retries: 3

development:
  &lt;&lt;: *default_settings
  debug: true

production:
  &lt;&lt;: *default_settings
  debug: false
  timeout: 60
</code></pre>
<h4 id="yaml">YAML高级特性</h4><h5 id="1-"><strong>1. 注释支持</strong></h5><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml"># 这是一个注释
database:
  host: localhost  # 行尾注释
  port: 5432
  # 可以在任何地方添加注释
  name: mydb
</code></pre>
<h5 id="2-"><strong>2. 多文档支持</strong></h5><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">---
# 第一个文档
name: Document 1
type: config
---
# 第二个文档
name: Document 2
type: data
...
</code></pre>
<h5 id="3-"><strong>3. 类型标记</strong></h5><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml"># 显式指定类型
version: !!str 1.2
count: !!int 100
enabled: !!bool true
</code></pre>
<h3 id="yaml">YAML的优势与局限</h3><p><strong>优势：</strong></p><ul><li>极佳的人类可读性</li><li>支持注释和文档化</li><li>支持复杂数据结构和引用</li><li>多种数据类型支持</li><li>适合配置文件和数据交换</li></ul><p><strong>局限：</strong></p><ul><li>对缩进极其敏感，容易出错</li><li>解析器实现复杂，速度略慢</li><li>某些实现有安全隐患</li><li>生态和普及度不如 JSON</li></ul><h2 id="yamljson">三、YAML与JSON结构对比</h2><p><img alt="JSON vs YAML" height="1846" src="https://image.vergiss.cn/i/2025/06/683e994ddaeea.png" width="2458"/></p><table><thead><tr><th> 特性       </th><th> JSON                     </th><th> YAML                                 </th></tr></thead><tbody><tr><td> 层级结构   </td><td> 大括号 <code>{}</code>、方括号 <code>[]</code> </td><td> 缩进（空格）表示                     </td></tr><tr><td> 键         </td><td> 必须用双引号             </td><td> 通常不加引号，支持单双引号           </td></tr><tr><td> 注释       </td><td> 不支持                   </td><td> 支持 <code>#</code> 注释                        </td></tr><tr><td> 解析速度   </td><td> 快                       </td><td> 中等                                 </td></tr><tr><td> 数据类型   </td><td> 基本类型有限             </td><td> 支持更多类型（如日期、合并、锚点等） </td></tr><tr><td> 可读性     </td><td> 机器友好，结构清晰       </td><td> 人类友好，格式灵活                   </td></tr><tr><td> 典型用途   </td><td> 数据交换、网络通信       </td><td> 配置文件、文档化配置                 </td></tr><tr><td> 多文档支持 </td><td> 不支持                   </td><td> 支持 <code>---</code> 分隔多个文档              </td></tr><tr><td> 复杂结构   </td><td> 不支持锚点和引用         </td><td> 支持锚点 <code>&amp;</code> 和引用 <code>*</code>              </td></tr></tbody></table><hr/><h2 id=""><strong>小结：</strong></h2><p>实际开发中，配置文件推荐用 YAML，数据交换和接口通信还是首选 JSON。YAML 写起来更顺手，但要注意缩进和格式，JSON 则更适合机器处理和网络传输。当然最终选择那种，更重要的还是依照个人乃至团队的习惯。</p><blockquote><p>参考链接：</p><ul><li><a href="https://www.json.org/json-zh.html">JSON 官方规范</a></li><li><a href="https://yaml.org/spec/1.2.2/">YAML 官方文档</a></li><li><a href="https://www.json2yaml.com/">YAML vs JSON 简明对比（英文）</a></li></ul></blockquote></div><p style="text-align:right"><a href="https://vergiss.cn/posts/cpp/yaml-json#comments">览毕，何不一言？</a></p></div>]]></description><link>https://vergiss.cn/posts/cpp/yaml-json</link><guid isPermaLink="true">https://vergiss.cn/posts/cpp/yaml-json</guid><dc:creator><![CDATA[vergiss]]></dc:creator><pubDate>Sat, 21 Jun 2025 17:17:00 GMT</pubDate></item><item><title><![CDATA[使用AdobeGenp破解Adobe全家桶]]></title><description><![CDATA[<link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66de523f93242.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66de53c2e9d0e.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66de54c41fd7b.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66de57609f078.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66de582905c84.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66de5886cdd33.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66de709d59554.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66de5e11b3ce1.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66de5ea7a133f.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66de5f1ad8a13.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66de5ff12e5aa.png"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://vergiss.cn/posts/tech/adobegenp-adobe">https://vergiss.cn/posts/tech/adobegenp-adobe</a></blockquote><div><p><del>首先我们进入<code>AdobeGenp</code>的<a href="https://github.com/wangzhenjjcn/AdobeGenp">GitHub页面</a>，在Releases中将最新的可执行程序下载下来。</del></p><p> (2025.06.03更新）原仓库已被删除，现可从<a href="https://github.com/Cur10s1tyByt3/AdobeGenP-Latest">https://github.com/Cur10s1tyByt3/AdobeGenP-Latest</a>下载程序。</p><h2 id="adobe-creative-cloud">一、安装Adobe Creative Cloud</h2><p>首先在官网下载Adobe Creative Cloud（<a href="https://creativecloud.adobe.com/zh-Hans">https://creativecloud.adobe.com/zh-Hans</a>）（可能需要科学访问）</p><p>安装，过程中需要账户，使用邮箱注册即可</p><p>安装过程中取消勾选AGS</p><p><img alt="安装Creative Cloud" height="800" src="https://image.vergiss.cn/i/2024/09/66de523f93242.png" width="1360"/></p><p>安装结束进入主界面后，点击左上角菜单 -&gt; 文件 -&gt; 首选项，在常规中将设置的三个条目取消勾选</p><p><img alt="Creative Cloud Desktop" src="https://image.vergiss.cn/i/2024/09/66de53c2e9d0e.png"/></p><p>确认后点击完成。</p><h2 id="adobe-creative-cloud">二、破解Adobe Creative Cloud</h2><p>安装好后我们可以看到里面的大多数应用程序都是“免费试用”和“购买”两个选项，且点击“免费试用”依然会跳转到购买界面</p><p><img src="https://image.vergiss.cn/i/2024/09/66de54c41fd7b.png"/></p><p>此时我们将程序关闭，由于我们之前取消了对”关闭Creative Cloud后在后台运行它”的选项，确保了它没有停留在后台运行。</p><p>打开我们的破解程序Adobe GenP，注意如果它被识别为威胁并删除，请在Windows安全中心将其还原。</p><p>请确保你的Adobe Creative Cloud是否安装在这里显示的默认路径下，如若不然，点击“Path”选择你所安装的路径。确认路径后，点击“Search”找到Adobe Creative Cloud，然后点击“Patch CC”。</p><p><img alt="Adobe GenP" src="https://image.vergiss.cn/i/2024/09/66de57609f078.png"/></p><p>当显示“All files patched”时表示已经破解完成。</p><p><img src="https://image.vergiss.cn/i/2024/09/66de582905c84.png"/></p><p>此时打开Adobe Creative Cloud就会发现里面的程序均可直接安装。</p><p><img src="https://image.vergiss.cn/i/2024/09/66de5886cdd33.png"/></p><h2 id="">三、破解应用程序</h2><p>在安装程序之前，可以点击右上角的头像，在首选项 -&gt; 应用程序中修改程序安装位置。</p><p><img src="https://image.vergiss.cn/i/2024/09/66de709d59554.png"/></p><p>这里以Photoshop为例，首先点击安装Photoshop，等待其下载安装完成。</p><p>安装好后如直接打开程序会弹出开始免费试用的窗口。</p><p><img alt="1725849100143.png" src="https://image.vergiss.cn/i/2024/09/66de5e11b3ce1.png"/></p><p>但我们想要的不是短暂的试用。此时将应用程序关闭，打开Adobe GenP。</p><p>点击“Path”选择你的Photoshop的安装路径，然后点击“Search”。</p><p><img src="https://image.vergiss.cn/i/2024/09/66de5ea7a133f.png"/></p><p>此时会发现它已经成功找到了Photoshop的相关内容，点击“Patch”运行破解。</p><p><img src="https://image.vergiss.cn/i/2024/09/66de5f1ad8a13.png"/></p><p>待其运行结束即破解完成，此时打开Photoshop就会发现可以直接使用且不会弹出免费试用提示了。</p><p><img src="https://image.vergiss.cn/i/2024/09/66de5ff12e5aa.png"/></p></div><p style="text-align:right"><a href="https://vergiss.cn/posts/tech/adobegenp-adobe#comments">览毕，何不一言？</a></p></div>]]></description><link>https://vergiss.cn/posts/tech/adobegenp-adobe</link><guid isPermaLink="true">https://vergiss.cn/posts/tech/adobegenp-adobe</guid><dc:creator><![CDATA[vergiss]]></dc:creator><pubDate>Tue, 03 Jun 2025 07:10:00 GMT</pubDate></item><item><title><![CDATA[Gismo库杂谈——与Eigen库的冲突（三）]]></title><description><![CDATA[<div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://vergiss.cn/posts/cpp/gismo-eigen-3">https://vergiss.cn/posts/cpp/gismo-eigen-3</a></blockquote><div><p>万万没有想到这个系列会写到第三篇，关于前两篇还请参见：</p><blockquote><p><a href="https://vergiss.cn/archives/BFVtsSES">Gismo库杂谈——与Eigen库的冲突</a></p><p><a href="https://vergiss.cn/archives/oneqwXNM">Gismo库杂谈——与Eigen库的冲突（续）</a></p></blockquote>
<p>自从上次对相关冲突解决以后，其实已经稳定在Windows下使用很久了，但是最近将代码迁移到MacOS系统下进行编译测试，结果不出所料再次出现类似的问题，发现报错同样是提示有几种类型在gsEigen命名空间下未定义，这个问题出现的原因还是Eigen下的同名文件中的保护宏使得在gsEigen中的相同定义被屏蔽，在<code>gsUndefEigenGuards.h</code>中添加以下几行即可：</p><pre class="language-c++ lang-c++"><code class="language-c++ lang-c++">#undef SPARSE_COLETREE_H
#undef SPARSE_COLETREE_H
#undef EIGEN_SPARSELU_MEMORY
</code></pre>
<p>同时，在修复了这个问题后还会有第二个报错：标识符<code>DstXprType</code>未定义。</p><p>这个是由于文件<code>gismo/gsEigen/src/Core/AssignEvaluator.h</code>第332行对<code>DstXprType</code>的定义被宏<code>EIGEN_NO_DEBUG</code>屏蔽，同时这个宏在其他文件中还受另外一个宏<code>NDEBUG</code>的控制，取消这两个宏的定义即可：</p><pre class="language-c++ lang-c++"><code class="language-c++ lang-c++">#undef NDEBUG
#undef EIGEN_NO_DEBUG
</code></pre>
<p>至此，也算是基本解决了两个库在Windows、MacOS系统下的绝大多数冲突问题（如还有类似冲突，定位冲突发生的位置进行相应调整即可），目前还未在Linux系统下进行测试，如还有相关问题后面也会再提。</p><p>方便起见，现已将通过取消Eigen保护宏解决冲突所需的所有（至少是目前）写入<code>gsUndefEigenGuards.h</code>中，可自行取用。（<a href="https://vergiss.cn/1723541207628">gsUndefEigenGuards.h</a>）</p></div><p style="text-align:right"><a href="https://vergiss.cn/posts/cpp/gismo-eigen-3#comments">览毕，何不一言？</a></p></div>]]></description><link>https://vergiss.cn/posts/cpp/gismo-eigen-3</link><guid isPermaLink="true">https://vergiss.cn/posts/cpp/gismo-eigen-3</guid><dc:creator><![CDATA[vergiss]]></dc:creator><pubDate>Wed, 27 Nov 2024 17:17:00 GMT</pubDate></item><item><title><![CDATA[Gismo库杂谈——与Eigen库的冲突（续）]]></title><description><![CDATA[<div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://vergiss.cn/posts/cpp/gismo-eigen-2">https://vergiss.cn/posts/cpp/gismo-eigen-2</a></blockquote><div><p>在之前的文章中我们提到了通过引入一个取消保护宏的头文件可以解决gismo库与Eigen库冲突的问题</p><pre class="language-cpp lang-cpp"><code class="language-cpp lang-cpp">#include &lt;gismo.h&gt;
#include &lt;gsUndefEigenGuards.h&gt;
#include &lt;Eigen/Dense&gt;
</code></pre><p>但是在最近的测试中发现如果代码中引入了<code>Eigen/SparseLU</code>则仍会发生冲突</p><pre class="language-cpp lang-cpp"><code class="language-cpp lang-cpp">#include &lt;gismo.h&gt;
#include &lt;gsUndefEigenGuards.h&gt;
#include &lt;Eigen/SparseLU&gt;
</code></pre><p>通过分析发现问题出现在<code>Eigen/src/SparseLU/SparseLUImpl.h</code>和<code>Eigen/src/SparseLU/SparseLU_Structs.h</code>两个头文件中，这两个头文件的保护宏分别是<code>SPARSELU_IMPL_H</code>和<code>EIGEN_LU_STRUCTS</code>，不符合<code>Eigen_*_H</code>的形式，于是未被之前的脚本命令检索到，所以我们只需在<code>gsUndefEigenGuards.h</code>文件中增加两行：</p><pre class="language-cpp lang-cpp"><code class="language-cpp lang-cpp">#undef SPARSELU_IMPL_H
#undef EIGEN_LU_STRUCTS
</code></pre><p>即可解决问题。</p></div><p style="text-align:right"><a href="https://vergiss.cn/posts/cpp/gismo-eigen-2#comments">览毕，何不一言？</a></p></div>]]></description><link>https://vergiss.cn/posts/cpp/gismo-eigen-2</link><guid isPermaLink="true">https://vergiss.cn/posts/cpp/gismo-eigen-2</guid><dc:creator><![CDATA[vergiss]]></dc:creator><pubDate>Fri, 08 Nov 2024 17:28:00 GMT</pubDate></item><item><title><![CDATA[Gismo库杂谈——与Eigen库的冲突]]></title><description><![CDATA[<div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://vergiss.cn/posts/cpp/gismo-eigen">https://vergiss.cn/posts/cpp/gismo-eigen</a></blockquote><div><h2 id="">问题描述</h2><p>在较新版本的Gismo库中可能会出现与外部Eigen库冲突的问题，例如以下代码：</p><pre class="language-cpp lang-cpp"><code class="language-cpp lang-cpp">#include &lt;gismo.h&gt;
#include &lt;Eigen/Dense&gt;

int main()
{
    gismo::gsMatrix&lt;real_t&gt; A(2, 2);
    Eigen::MatrixXd B(2, 2);
    return 0;
}
</code></pre><p>这段代码在编译阶段会报错：“Eigen”：不是类或命名空间名称。
出现这个问题的原因在于库的创建者为了修复gismo与其他库中的Eigen冲突问题，将包含在gismo中的Eigen命名空间重命名为gsEigen，但其中Eigen库的所有头文件开头的保护性宏定义没有被修改，于是<code>#include &lt;Eigen/Dense&gt;</code>引入的所有头文件的内容都在开头的<code>#ifndef EIGEN_XXX_H</code>判断为非后被忽略掉了。</p><h2 id="">解决方案</h2><p>参考官方issue <a href="https://github.com/gismo/gismo/issues/438">#438</a>中提到的 “Undefine all eigen guards so that loading again Eigen library from another source is possible.”
如果一定要使用外部的Eigen库，则应先取消掉一些宏定义，我们可以在gismo源目录中或安装好的gismo的include目录中打开终端，执行以下命令：</p><pre class="language-shell lang-shell"><code class="language-shell lang-shell">grep -rh &quot;#ifndef EIGEN_.*_H&quot; * | sed &quot;s/#ifndef/#undef/g&quot; &gt; gsUndefEigenGuards.h
</code></pre><p>需要注意，这行命令涉及的两个程序<code>grep</code>、<code>sed</code>都是Unix系统下的，如果想在Windows下使用则需安装额外工具，我这里安装的是<a href="https://www.busybox.net/">BusyBox</a>.
执行了以上的命令后，文件夹中会多出来一个文件<code>gsUndefEigenGuards.h</code>，里面每一行都是<code>#undef EIGEN_XXX_H</code>的形式，这就是在取消掉Eigen的所有保护宏。当然如果这一步实在不会操作，我这边也提供了我输出的<code>gsUndefEigenGuards.h</code>以供使用。（<a href="https://vergiss.cn/1723541207628">gsUndefEigenGuards.h</a>）
在得到该文件后，将其加入到项目中并在<code>#incude &lt;gismo.h&gt;</code>后引入它就可以解决问题了。</p><pre class="language-cpp lang-cpp"><code class="language-cpp lang-cpp">#include &lt;gismo.h&gt;
#include &quot;gsUndefEigenGuards.h&quot;
#include &lt;Eigen/Dense&gt;

int main()
{
    gismo::gsMatrix&lt;real_t&gt; A(2, 2);
    Eigen::MatrixXd B(2, 2);
    return 0;
}
</code></pre><p><strong>替代性方案：</strong>
在gismo库中也含有一个内部的Eigen，但是由于Eigen命名空间被修改导致我们无法直接使用，所以如果考虑到前面的解决方案繁琐且存在隐患，也可以通过增加一行<code>#define Eigen gsEigen</code>的方式来使用gismo内部的Eigen</p><pre class="language-cpp lang-cpp"><code class="language-cpp lang-cpp">#include &lt;gismo.h&gt;
#define Eigen gsEigen

int main()
{
    gismo::gsMatrix&lt;real_t&gt; A(2, 2);
    Eigen::MatrixXd B(2, 2);
    return 0;
}
</code></pre><h2 id="">补充说明</h2><p>以上的方案通过在<code>#include &lt;gismo.h&gt;</code>后引入一个取消Eigen保护宏的头文件来解决问题，然而如果Eigen库是在gismo之前引入的呢？那我们则需要在Eigen之后，gismo之前引入这个头文件：</p><pre class="language-cpp lang-cpp"><code class="language-cpp lang-cpp">#include &lt;Eigen/Dense&gt;
#include &quot;gsUndefEigenGuards.h&quot;
#include &lt;gismo.h&gt;
</code></pre><p>当然在复杂的场景下，比如多文件编译，我们需要在合适的位置引入这个头文件，在使其发挥作用的同时还需避免如下所示的在两次重复引入Eigen之间引入此头文件导致Eigen中的内容重定义。</p><pre class="language-cpp lang-cpp"><code class="language-cpp lang-cpp">#include &lt;Eigen/Dense&gt;
#include &quot;gsUndefEigenGuards.h&quot;
#include &lt;Eigen/Decse&gt;
</code></pre><blockquote><p>参考官方issue <a href="https://github.com/gismo/gismo/issues/438">#438</a>, <a href="https://github.com/gismo/gismo/issues/720">#720</a>, <a href="https://github.com/gismo/gismo/issues/661">#661</a></p></blockquote></div><p style="text-align:right"><a href="https://vergiss.cn/posts/cpp/gismo-eigen#comments">览毕，何不一言？</a></p></div>]]></description><link>https://vergiss.cn/posts/cpp/gismo-eigen</link><guid isPermaLink="true">https://vergiss.cn/posts/cpp/gismo-eigen</guid><dc:creator><![CDATA[vergiss]]></dc:creator><pubDate>Mon, 04 Nov 2024 17:29:00 GMT</pubDate></item><item><title><![CDATA[Gismo库的安装与配置（Windows篇）]]></title><description><![CDATA[<link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/08/66d1e04d44c7a.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d3beb08daf4.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d3bf6aec453.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d3c1efb7fbf.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d3c4077d56e.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d3c467e4a64.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d3cd787b6ee.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d3d02cd6166.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d3d0c9ddb37.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d5ceaa082fc.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d5d038753b0.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d5d0e2b7608.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d5d15216f66.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d5d471d46ed.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d5d8d9b572e.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d5db406e404.png"/><link rel="preload" as="image" href="https://image.vergiss.cn/i/2024/09/66d5dce0a3033.png"/><div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://vergiss.cn/posts/cpp/gismo-windows">https://vergiss.cn/posts/cpp/gismo-windows</a></blockquote><div><p>由于最近正好想将环境中的Gismo库更新到最新版，需要将Gismo库重新编译一下，正好写下系列文章对Gismo库在不同环境下的安装与配置过程进行简单的介绍。</p><h2 id="">一、环境需求</h2><ol start="1"><li>Visual Studio 2022（2017、2019亦可，本文用以2022版做演示）</li><li>CMake
于CMake官网（<a href="https://cmake.org/download">https://cmake.org/download</a>）下载最新版中Windows x64安装程序并执行安装步骤即可</li></ol><p>注意：可以在终端中输出<code>cmake --version</code>以检查是否在安装过程中将<code>CMake</code>添加到环境变量中，如若不然，需要在<code>CMake</code>安装路径下找到<code>cmake.exe</code>所在的<code>bin</code>目录，将其添加到环境变量中，应用后重启终端进行检测。</p><h2 id="">二、源代码获取</h2><p>我们首先进入Gismo库的GitHub页面（<a href="https://github.com/gismo/gismo">https://github.com/gismo/gismo</a>）
<img alt="Gismo库GitHub页面" height="556" src="https://image.vergiss.cn/i/2024/08/66d1e04d44c7a.png" width="933"/>
点击右上角<code>Code</code>按钮弹出下拉页面，如果环境中安装了<code>git</code>，可以复制下红框中的链接，在一个指定的文件夹（源代码将下载在这个文件夹中）中打开终端，并输入</p><pre class="language-shell lang-shell"><code class="language-shell lang-shell">git clone https://github.com/gismo/gismo.git
</code></pre><p>其中中最后的链接即为刚才复制的链接。
但是这个过程可能由于网络问题导致<code>clone</code>失败，如果环境中未安装<code>git</code>或者使用<code>git</code>无法<code>clone</code>的，可以点击最后一个红框中的<code>Download ZIP</code>下载源代码压缩文件，下载后解压出来即可。
克隆下来的文件夹名称为<code>gismo</code>，下载压缩包解压出来的文件夹名称为<code>gismo-stable</code>，我这里是执行克隆过程得到的源代码文件夹<code>gismo</code>，下面统一以此进行讲述，如理解不便，可自行将文件夹<code>gismo-stable</code>名称修改为<code>gismo</code>.</p><h2 id="gismo">三、Gismo库的构建与安装</h2><p>首先要记下你刚刚获取的源代码的储存路径，我这里是<code>D:\MyProject\GitHub\gismo</code>.
在任意路径下创建一个文件夹<code>gismo-build</code>，这里将储存后续构建的过程文件，建议创建在源代码文件夹的附近便于你能找到它，我这里是<code>D:\MyInclude\cpp\LibBuild_workspace\gismo-build</code>.</p><h3 id="1-cmake-gui">1. 使用<code>cmake-gui</code>生成</h3><p>我们打开刚才<code>CMake(cmake-gui)</code>，分别填入这两个路径，并点击左下角的<code>Configure</code>
<img src="https://image.vergiss.cn/i/2024/09/66d3beb08daf4.png"/>
在弹出窗口的第一个框中选择生成器（如<code>VS 2022</code>选择<code>Visual Studio 17 2022</code>），点击<code>Finish</code>.
<img src="https://image.vergiss.cn/i/2024/09/66d3bf6aec453.png"/>
经过短暂等待得到如图所示的<code>CMake</code>缓存
<img src="https://image.vergiss.cn/i/2024/09/66d3c1efb7fbf.png"/>
这里注意，我们首先要将的变量<code>CMAKE_BUILD_TYPE</code>的值修改为<code>Release</code>（当然如果你需要构建<code>Debug</code>模式的库修改为<code>Debug</code>即可），然后取消<code>GISMO_BUILD_EXAMPLES</code>的勾选（如果勾选了则会额外构建一些实例程序，会耗费更多的时间）。
还有一个可选择性修改的变量<code>CMAKE_INSTALL_PREFIX</code>，这个是后续进行安装时的安装路径，可以选择使用它的默认路径，也可根据自己喜好进行修改，这里我修改为了<code>D:\MyInclude\cpp\gismo\Release</code>.
修改好后点击<code>Generate</code>生成
<img src="https://image.vergiss.cn/i/2024/09/66d3c4077d56e.png"/>
待下方输出框中出现<code>Generating done</code>即为生成完毕
<img src="https://image.vergiss.cn/i/2024/09/66d3c467e4a64.png"/></p><h3 id="2-">2. 库的构建</h3><p>在<code>gismo-build</code>文件夹中打开终端（请回忆一下它的路径），当然如果你不知道如何打开终端，你可以尝试一下在文件夹中空白处点击鼠标右键，在下拉选项中点击“在终端中打开”
在终端中输入命令</p><pre class="language-shell lang-shell"><code class="language-shell lang-shell">cmake --build . --config Release
</code></pre><p>回车执行
<img src="https://image.vergiss.cn/i/2024/09/66d3cd787b6ee.png"/>
接下来耐心等待即可，这个过程需要一定的时间</p><h3 id="3-">3. 库的安装</h3><p>构建完毕后执行命令进行安装</p><pre class="language-shell lang-shell"><code class="language-shell lang-shell">cmake --install . --config Release
</code></pre><p><img src="https://image.vergiss.cn/i/2024/09/66d3d02cd6166.png"/>
此时进入你的安装路径中会发现之前的空文件夹中多出了四个文件夹，<code>gismo</code>库已成功安装</p><ul><li><code>bin`中包含</code>gismo<code>的</code>dll<code>文件，如果前面的生成过程中勾选了</code>GISMO<em>BUILD</em>EXAMPLES<code>，则会包含所有示例项目对应的可执行程序（</code>.exe`文件）</li><li><code>include`中包含</code>gismo`的所有头文件</li><li><code>lib`中包含</code>gismo<code>的</code>lib<code>文件和一些</code>cmake`文件</li><li><code>share\</code>中包含示例程序的数据文件，如果没有编译示例程序则无需用到这里面的文件
<img src="https://image.vergiss.cn/i/2024/09/66d3d0c9ddb37.png"/></li></ul><p>最后，如果你在前面将<code>gismo</code>的安装路径修改为了自定义的路径，且后续计划用<code>CMake</code>来配置使用<code>gismo</code>的项目，那么你还需要设置一个环境变量<code>gismo_DIR</code>，值为<code>lib`的路径，如</code>D:\MyInclude\cpp\gismo\Release\lib<code>,这是为了让你的</code>CMake<code>项目能够通过这个路径下的</code>cmake<code>文件找到</code>gismo`库。<strong>（如果你只是在VS中使用，可以无需进行这一步）</strong></p><blockquote><p>注意：修改（添加）了环境变量后，需要开启一个新的终端才能在里面应用修改（修改前开启的终端中该环境变量仍是原值）</p></blockquote><blockquote>
<p><strong>终端中查看环境变量</strong></p><ul><li>在cmd中，执行<code>echo %变量名%</code>，如<code>echo %gismo_DIR%</code></li><li>在powershell中，执行<code>$env:变量名</code>，如<code>$env:gismo_DIR</code></li></ul></blockquote>
<h2 id="gismo">四、如何将Gismo库配置到项目中</h2><h3 id="1-vs">1. 直接在VS项目属性中配置</h3><p>创建一个VS项目，添加一个源文件，并在其中写入简单的测试代码</p><pre class="language-cpp lang-cpp"><code class="language-cpp lang-cpp">#include &lt;gismo.h&gt;

using namespace gismo;

int main(int, char**)
{
    gsInfo.precision(3);
    gsKnotVector&lt;&gt;   kv(-1, 0, 3, 3, 1);
    gsBSplineBasis&lt;&gt; bsp(kv);
    gsInfo &lt;&lt; bsp.detail() &lt;&lt; &quot;\n&quot;;
    bsp.uniformRefine();
    gsInfo &lt;&lt; bsp.detail() &lt;&lt; &quot;\n&quot;;
    return 0;
}
</code></pre><p>注意要将红框中的配置设置为<code>Release</code>模式，因为我们的<code>gismo</code>库也是在<code>Release</code>模式下构建的，如果想在<code>Debug</code>模式下使用则需构建<code>Debug</code>模式的库
可以看到代码中充斥着各种报错，因为我们还没有将<code>gismo</code>库配置进来
<img src="https://image.vergiss.cn/i/2024/09/66d5ceaa082fc.png"/>
右键点击左边的解决方案<code>gismoTest</code>，下拉框中点击属性，在属性页中依次进行以下三项修改：</p><ol start="1"><li>“C/C++” -&gt; “常规” -&gt; “附加包含目录” 中添加<code>include\gismo`路径，这里为</code>D:\MyInclude\cpp\gismo\Release\include\gismo`
<img src="https://image.vergiss.cn/i/2024/09/66d5d038753b0.png"/></li><li>“链接器” -&gt; “常规” -&gt; “附加库目录” 中添加<code>lib`路径，这里为</code>D:\MyInclude\cpp\gismo\Release\lib`
<img src="https://image.vergiss.cn/i/2024/09/66d5d0e2b7608.png"/></li><li>“链接器” -&gt; “输入” -&gt; “附加依赖项” 中添加<code>gismo.lib</code>
<img src="https://image.vergiss.cn/i/2024/09/66d5d15216f66.png"/></li></ol><p>修改完属性后点击确定，并将<code>gismo</code>的<code>bin`目录中的</code>gismo.dll<code>复制到此项目源文件所在路径下（即</code>main.cpp`所在路径）
此时程序便能够成功运行
<img src="https://image.vergiss.cn/i/2024/09/66d5d471d46ed.png"/></p><blockquote><p>注意：附加依赖项中可以添加<code>gismo.lib</code>或<code>gismo_static.lib</code>，分别表示动态库和静态库，如果添加动态库则需要复制<code>gismo.dll</code>到项目中，添加静态库则不需要</p><h3 id="2-cmakegismo">2. 用CMake配置使用gismo的项目</h3><h4 id="">引入</h4><p>主观上讲我更加喜欢用<code>CMake</code>来配置项目，对我来讲这可能更加清晰（仅代表个人），当然如果想要理解后面配置过程，可能需要有一定的<code>CMake</code>基础。
<code>CMake</code>可以在终端中执行，也有可视化窗口（<code>cmake-gui</code>），一些常见编辑器也有相关插件适配（如 VSCode），其实我更推荐 VSCode+CMake插件 的方案来配置项目（有一些更加便捷的按钮），考虑到普适性，这里我在终端中执行<code>CMake</code>命令。</p><h4 id="">配置过程</h4><p>首先在任意一个你喜欢的位置新建一个文件夹，在文件夹中新建两个文件<code>CMakeLists.txt</code>、<code>main.cpp</code>
注意：第一个文件<code>CMakeLists.txt</code>文件名必须完全一致，第二个文件<code>main.cpp</code>为项目源文件，文件名可以修改</p></blockquote>
<p><img src="https://image.vergiss.cn/i/2024/09/66d5d8d9b572e.png"/>
在文件<code>CMakeLists.txt</code>中写入如下内容</p><pre class="language-cmake lang-cmake"><code class="language-cmake lang-cmake">cmake_minimum_required(VERSION 3.20.0)
project(gismoTest) #项目名

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) #设置可执行程序输出路径

find_package(gismo REQUIRED) #搜索gismo库
if(gismo_FOUND)
    message(STATUS &quot;gismo found: ${gismo_DIR}&quot;)
    include_directories(${GISMO_INCLUDE_DIRS}) #设置附加包含目录
    link_directories(${GISMO_LIBRARY_DIR}) #设置附加库目录
endif()

add_executable(gismoTest main.cpp)
target_link_libraries(gismoTest PUBLIC gismo) #将目标链接到gismo动态库，如果链接静态库则将gismo修改为gismo_static
</code></pre><p>在文件<code>main.cpp</code>中写入测试代码</p><pre class="language-cpp lang-cpp"><code class="language-cpp lang-cpp">#include &lt;gismo.h&gt;

using namespace gismo;

int main(int, char**)
{
    gsInfo.precision(3);
    gsKnotVector&lt;&gt;   kv(-1, 0, 3, 3, 1);
    gsBSplineBasis&lt;&gt; bsp(kv);
    gsInfo &lt;&lt; bsp.detail() &lt;&lt; &quot;\n&quot;;
    bsp.uniformRefine();
    gsInfo &lt;&lt; bsp.detail() &lt;&lt; &quot;\n&quot;;
    return 0;
}
</code></pre><p>两个文件修改并保存后，在此路径中打开终端，依次执行</p><pre class="language-shell lang-shell"><code class="language-shell lang-shell">cmake -B build
cmake --build build --config Release
</code></pre><p><img src="https://image.vergiss.cn/i/2024/09/66d5db406e404.png"/>
此时会发现文件夹中新增了两个文件夹<code>build`和</code>bin`，将<code>gismo</code>的<code>bin`目录中的</code>gismo.dll<code>复制到此项目的</code>bin\Release`中（即<code>gismoTest.exe</code>所在路径），继续在终端中执行</p><pre class="language-shell lang-shell"><code class="language-shell lang-shell">cd bin\Release
.\gismoTest.exe
</code></pre><p>即可成功运行项目生成的可执行程序
<img src="https://image.vergiss.cn/i/2024/09/66d5dce0a3033.png"/></p></div><p style="text-align:right"><a href="https://vergiss.cn/posts/cpp/gismo-windows#comments">览毕，何不一言？</a></p></div>]]></description><link>https://vergiss.cn/posts/cpp/gismo-windows</link><guid isPermaLink="true">https://vergiss.cn/posts/cpp/gismo-windows</guid><dc:creator><![CDATA[vergiss]]></dc:creator><pubDate>Mon, 21 Oct 2024 17:17:00 GMT</pubDate></item><item><title><![CDATA[关于搭建Alist的一系列问题归档]]></title><description><![CDATA[<div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://vergiss.cn/posts/tech/alist">https://vergiss.cn/posts/tech/alist</a></blockquote><div><h2 id="1-alist">1. Alist单个文件太大上传失败</h2><p>此问题集中出现在配置了反向代理的情况下，可以通过调整nginx设定来解决
将<code>client_max_body_size</code>值增大：</p><pre class=""><code class="">server {
    ．．．．．．．．．
    location / {
    ．．．．
        client_max_body_size 10G;
    ．．．．
    }
    ．．．．．．．．．
}
</code></pre><h2 id="2-">2. 下载按钮链接错误</h2><p>在配置反向代理后发现文件页面中的下载按钮链接错误，显示 <strong>404 NOT FOUND</strong>
同样调整反向代理的配置：</p><pre class=""><code class="">location / {
    proxy_set_header Host $http_host;
}
</code></pre><p>原配置中可能存在一条<code>proxy_set_header Host (Your_IP);</code>，为避免其与调整的配置冲突将其删除或注释即可。</p><blockquote><p>参考<a href="https://github.com/alist-org/alist/issues/3644">官方issure</a></p></blockquote></div><p style="text-align:right"><a href="https://vergiss.cn/posts/tech/alist#comments">览毕，何不一言？</a></p></div>]]></description><link>https://vergiss.cn/posts/tech/alist</link><guid isPermaLink="true">https://vergiss.cn/posts/tech/alist</guid><dc:creator><![CDATA[vergiss]]></dc:creator><pubDate>Wed, 02 Oct 2024 17:17:00 GMT</pubDate></item><item><title><![CDATA[关于利用lsky-pro搭建个人图床问题归档]]></title><description><![CDATA[<div><blockquote>此渲染由 Yohaku API 生成，或存排版之虞，最佳体验请往：<a href="https://vergiss.cn/posts/tech/lsky-pro">https://vergiss.cn/posts/tech/lsky-pro</a></blockquote><div><h2 id="">配置反向代理后访问错误</h2><p>在配置反向代理后使用域名对网站进行访问，页面错误，且无法登录
解决方案：</p><ol start="1"><li>修改/config/app.php
<code>
&#x27;url&#x27; =&gt; env(&#x27;APP_URL&#x27;, &#x27;https://xxxxx.com&#x27;),
&#x27;asset_url&#x27; =&gt; env(&#x27;ASSET_URL&#x27;, &#x27;https://xxxxx.com0&#x27;),
</code></li><li>修改/app/Providers/ApServiceProvider.php
第 32 行下面追加一行：
<code>
\Illuminate\Support\Facades\URL::forceScheme(&#x27;https&#x27;);
</code></li><li>修改nginx配置文件
在其中增加一条：
<code>
proxy_set_header X-Forwarded-Host $http_host;
</code>
&gt; 参考<a href="https://github.com/lsky-org/lsky-pro/issues/607">官方issure</a></li></ol></div><p style="text-align:right"><a href="https://vergiss.cn/posts/tech/lsky-pro#comments">览毕，何不一言？</a></p></div>]]></description><link>https://vergiss.cn/posts/tech/lsky-pro</link><guid isPermaLink="true">https://vergiss.cn/posts/tech/lsky-pro</guid><dc:creator><![CDATA[vergiss]]></dc:creator><pubDate>Wed, 02 Oct 2024 17:17:00 GMT</pubDate></item></channel></rss>