首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法在M1 mac上安装节点-画布

无法在M1 mac上安装节点-画布
EN

Stack Overflow用户
提问于 2022-10-28 10:15:17
回答 1查看 411关注 0票数 0

需要帮助使节点-画布安装在M1 mac上。这是原木。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yarn install

...YN0000: ┌ Link step
➤ YN0007: │ canvas@npm:2.10.1 must be built because it never has been before or the last one failed
➤ YN0009: │ canvas@npm:2.10.1 couldn't be built successfully (exit code 1, logs can be found here: /private/tmp/xfs-97e0a91f/build.log)YN0000: └ Completed in 14s 140ms
➤ YN0000: Failed with errors in 14s 708ms
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# This file contains the result of Yarn building a package (canvas@npm:2.10.1)
# Script name: install

node-pre-gyp info it worked if it ends with ok
node-pre-gyp info using node-pre-gyp@1.0.10
node-pre-gyp info using node@18.9.1 | darwin | arm64
node-pre-gyp http GET https://github.com/Automattic/node-canvas/releases/download/v2.10.1/canvas-v2.10.1-node-v108-darwin-unknown-arm64.tar.gz
node-pre-gyp ERR! install response status 404 Not Found on https://github.com/Automattic/node-canvas/releases/download/v2.10.1/canvas-v2.10.1-node-v108-darwin-unknown-arm64.tar.gz 
node-pre-gyp WARN Pre-built binaries not installable for canvas@2.10.1 and node@18.9.1 (node-v108 ABI, unknown) (falling back to source compile with node-gyp) 
node-pre-gyp WARN Hit error response status 404 Not Found on https://github.com/Automattic/node-canvas/releases/download/v2.10.1/canvas-v2.10.1-node-v108-darwin-unknown-arm64.tar.gz 
gyp info it worked if it ends with ok
gyp info using node-gyp@9.3.0
gyp info using node@18.9.1 | darwin | arm64
gyp info ok 
gyp info it worked if it ends with ok
gyp info using node-gyp@9.3.0
gyp info using node@18.9.1 | darwin | arm64
gyp info find Python using Python version 3.10.8 found at "/opt/homebrew/opt/python@3.10/bin/python3.10"
gyp info spawn /opt/homebrew/opt/python@3.10/bin/python3.10
gyp info spawn args [
gyp info spawn args   '/Users/m1macuser/Code/projectfolder/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/m1macuser/Code/projectfolder/node_modules/canvas/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/m1macuser/Code/projectfolder/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/m1macuser/Library/Caches/node-gyp/18.9.1/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/Users/m1macuser/Library/Caches/node-gyp/18.9.1',
gyp info spawn args   '-Dnode_gyp_dir=/Users/m1macuser/Code/projectfolder/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/Users/m1macuser/Library/Caches/node-gyp/18.9.1/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/Users/m1macuser/Code/projectfolder/node_modules/canvas',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
gyp info ok 
gyp info it worked if it ends with ok
gyp info using node-gyp@9.3.0
gyp info using node@18.9.1 | darwin | arm64
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/Users/m1macuser/Code/projectfolder/node_modules/canvas/build'
  SOLINK_MODULE(target) Release/canvas-postbuild.node
  CXX(target) Release/obj.target/canvas/src/backend/Backend.o
In file included from ../src/backend/Backend.cc:1:
../src/backend/Backend.h:60:14: warning: private field 'backend' is not used [-Wunused-private-field]
    Backend* backend;
             ^
1 warning generated.
  CXX(target) Release/obj.target/canvas/src/backend/ImageBackend.o
  CXX(target) Release/obj.target/canvas/src/backend/PdfBackend.o
  CXX(target) Release/obj.target/canvas/src/backend/SvgBackend.o
  CXX(target) Release/obj.target/canvas/src/bmp/BMPParser.o
  CXX(target) Release/obj.target/canvas/src/Backends.o
  CXX(target) Release/obj.target/canvas/src/Canvas.o
In file included from ../src/Canvas.cc:21:
../src/Util.h:18:7: warning: 'SetAccessor' is deprecated [-Wdeprecated-declarations]
        Nan::SetAccessor(
             ^
../../nan/nan.h:2512:1: note: 'SetAccessor' has been explicitly marked deprecated here
NAN_DEPRECATED inline void SetAccessor(
^
../../nan/nan.h:110:40: note: expanded from macro 'NAN_DEPRECATED'
# define NAN_DEPRECATED __attribute__((deprecated))
                                       ^
1 warning generated.
  CXX(target) Release/obj.target/canvas/src/CanvasGradient.o
  CXX(target) Release/obj.target/canvas/src/CanvasPattern.o
  CXX(target) Release/obj.target/canvas/src/CanvasRenderingContext2d.o
In file included from ../src/CanvasRenderingContext2d.cc:19:
../src/Util.h:18:7: warning: 'SetAccessor' is deprecated [-Wdeprecated-declarations]
        Nan::SetAccessor(
             ^
../../nan/nan.h:2512:1: note: 'SetAccessor' has been explicitly marked deprecated here
NAN_DEPRECATED inline void SetAccessor(
^
../../nan/nan.h:110:40: note: expanded from macro 'NAN_DEPRECATED'
# define NAN_DEPRECATED __attribute__((deprecated))
                                       ^
1 warning generated.
  CXX(target) Release/obj.target/canvas/src/closure.o
  CXX(target) Release/obj.target/canvas/src/color.o
  CXX(target) Release/obj.target/canvas/src/Image.o
In file included from ../src/Image.cc:11:
../src/Util.h:18:7: warning: 'SetAccessor' is deprecated [-Wdeprecated-declarations]
        Nan::SetAccessor(
             ^
../../nan/nan.h:2512:1: note: 'SetAccessor' has been explicitly marked deprecated here
NAN_DEPRECATED inline void SetAccessor(
^
../../nan/nan.h:110:40: note: expanded from macro 'NAN_DEPRECATED'
# define NAN_DEPRECATED __attribute__((deprecated))
                                       ^
../src/Image.cc:1164:3: warning: 'rsvg_handle_get_dimensions' is deprecated: Use 'rsvg_handle_get_intrinsic_size_in_pixels' instead [-Wdeprecated-declarations]
  rsvg_handle_get_dimensions(_rsvg, dims);
  ^
/nix/store/5b64vfc6bhip3xwqg3nvb8bv80wn5rf4-librsvg-2.55.1-dev/include/librsvg-2.0/librsvg/rsvg.h:705:1: note: 'rsvg_handle_get_dimensions' has been explicitly marked deprecated here
RSVG_DEPRECATED_FOR(rsvg_handle_get_intrinsic_size_in_pixels)
^
/nix/store/5b64vfc6bhip3xwqg3nvb8bv80wn5rf4-librsvg-2.55.1-dev/include/librsvg-2.0/librsvg/rsvg.h:50:32: note: expanded from macro 'RSVG_DEPRECATED_FOR'
#define RSVG_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) RSVG_API
                               ^
/nix/store/dp31bsk70zdyh46jpxzjwasbqlv2ncgv-glib-2.74.0-dev/include/glib-2.0/glib/gmacros.h:1211:44: note: expanded from macro 'G_DEPRECATED_FOR'
#define G_DEPRECATED_FOR(f) __attribute__((__deprecated__("Use '" #f "' instead")))
                                           ^
../src/Image.cc:1203:24: warning: 'rsvg_handle_render_cairo' is deprecated: Use 'rsvg_handle_render_document' instead [-Wdeprecated-declarations]
  gboolean render_ok = rsvg_handle_render_cairo(_rsvg, cr);
                       ^
/nix/store/5b64vfc6bhip3xwqg3nvb8bv80wn5rf4-librsvg-2.55.1-dev/include/librsvg-2.0/librsvg/rsvg-cairo.h:87:1: note: 'rsvg_handle_render_cairo' has been explicitly marked deprecated here
RSVG_DEPRECATED_FOR(rsvg_handle_render_document)
^
/nix/store/5b64vfc6bhip3xwqg3nvb8bv80wn5rf4-librsvg-2.55.1-dev/include/librsvg-2.0/librsvg/rsvg.h:50:32: note: expanded from macro 'RSVG_DEPRECATED_FOR'
#define RSVG_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) RSVG_API
                               ^
/nix/store/dp31bsk70zdyh46jpxzjwasbqlv2ncgv-glib-2.74.0-dev/include/glib-2.0/glib/gmacros.h:1211:44: note: expanded from macro 'G_DEPRECATED_FOR'
#define G_DEPRECATED_FOR(f) __attribute__((__deprecated__("Use '" #f "' instead")))
                                           ^
3 warnings generated.
  CXX(target) Release/obj.target/canvas/src/ImageData.o
In file included from ../src/ImageData.cc:5:
../src/Util.h:18:7: warning: 'SetAccessor' is deprecated [-Wdeprecated-declarations]
        Nan::SetAccessor(
             ^
../../nan/nan.h:2512:1: note: 'SetAccessor' has been explicitly marked deprecated here
NAN_DEPRECATED inline void SetAccessor(
^
../../nan/nan.h:110:40: note: expanded from macro 'NAN_DEPRECATED'
# define NAN_DEPRECATED __attribute__((deprecated))
                                       ^
1 warning generated.
  CXX(target) Release/obj.target/canvas/src/init.o
  CXX(target) Release/obj.target/canvas/src/register_font.o
../src/register_font.cc:9:10: fatal error: 'CoreText/CoreText.h' file not found
#include <CoreText/CoreText.h>
         ^~~~~~~~~~~~~~~~~~~~~
1 error generated.
make: *** [canvas.target.mk:176: Release/obj.target/canvas/src/register_font.o] Error 1
make: Leaving directory '/Users/m1macuser/Code/projectfolder/node_modules/canvas/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/m1macuser/Code/projectfolder/node_modules/node-gyp/lib/build.js:203:23)
gyp ERR! stack     at ChildProcess.emit (node:events:513:28)
gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:291:12)
gyp ERR! System Darwin 21.6.0
gyp ERR! command "/nix/store/5y4bd2r99zhdbir95w5pf51bwfg37bwa-nodejs-18.9.1/bin/node" "/Users/m1macuser/Code/projectfolder/node_modules/node-gyp/bin/node-gyp.js" "build" "--fallback-to-build" "--update-binary" "--module=/Users/m1macuser/Code/projectfolder/node_modules/canvas/build/Release/canvas.node" "--module_name=canvas" "--module_path=/Users/m1macuser/Code/projectfolder/node_modules/canvas/build/Release" "--napi_version=8" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v108"
gyp ERR! cwd /Users/m1macuser/Code/projectfolder/node_modules/canvas
gyp ERR! node -v v18.9.1
gyp ERR! node-gyp -v v9.3.0
gyp ERR! not ok 
node-pre-gyp ERR! build error 
node-pre-gyp ERR! stack Error: Failed to execute '/nix/store/5y4bd2r99zhdbir95w5pf51bwfg37bwa-nodejs-18.9.1/bin/node /Users/m1macuser/Code/projectfolder/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --update-binary --module=/Users/m1macuser/Code/projectfolder/node_modules/canvas/build/Release/canvas.node --module_name=canvas --module_path=/Users/m1macuser/Code/projectfolder/node_modules/canvas/build/Release --napi_version=8 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v108' (1)
node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/Users/m1macuser/Code/projectfolder/node_modules/@mapbox/node-pre-gyp/lib/util/compile.js:89:23)
node-pre-gyp ERR! stack     at ChildProcess.emit (node:events:513:28)
node-pre-gyp ERR! stack     at maybeClose (node:internal/child_process:1091:16)
node-pre-gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:302:5)
node-pre-gyp ERR! System Darwin 21.6.0
node-pre-gyp ERR! command "/nix/store/5y4bd2r99zhdbir95w5pf51bwfg37bwa-nodejs-18.9.1/bin/node" "/Users/m1macuser/Code/projectfolder/node_modules/@mapbox/node-pre-gyp/bin/node-pre-gyp" "install" "--fallback-to-build" "--update-binary"
node-pre-gyp ERR! cwd /Users/m1macuser/Code/projectfolder/node_modules/canvas
node-pre-gyp ERR! node -v v18.9.1
node-pre-gyp ERR! node-pre-gyp -v v1.0.10
node-pre-gyp ERR! not ok 
Failed to execute '/nix/store/5y4bd2r99zhdbir95w5pf51bwfg37bwa-nodejs-18.9.1/bin/node /Users/m1macuser/Code/projectfolder/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --update-binary --module=/Users/m1macuser/Code/projectfolder/node_modules/canvas/build/Release/canvas.node --module_name=canvas --module_path=/Users/m1macuser/Code/projectfolder/node_modules/canvas/build/Release --napi_version=8 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v108' (1)

这似乎会引发错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 warning generated.
  CXX(target) Release/obj.target/canvas/src/init.o
  CXX(target) Release/obj.target/canvas/src/register_font.o
../src/register_font.cc:9:10: fatal error: 'CoreText/CoreText.h' file not found
#include <CoreText/CoreText.h>

我卡住了。请帮帮我!

其他说明:

  • OSX 12.6
  • Node v.18 (与Nix一起安装)
  • Xcode和Xcode-选择已安装的
  • Nix用于安装其他库dep(如您在日志中所看到的)

F 212

节点构建:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
file node_modules/canvas/build/Release/canvas-postbuild.node 
node_modules/canvas/build/Release/canvas-postbuild.node: Mach-O 64-bit arm64 bundle, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL>

Nix外壳:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# { pkgs ? import <nixpkgs> {} }:
with import <nixpkgs> {};

stdenv.mkDerivation {
  name = "myproject";

  nativeBuildInputs = [ pkg-config ];
  
  buildInputs = [
    nodejs-18_x
    yarn
    jdk
    docker
    chromedriver
    docker
    rustup
    libuuid
    act
    cairo
    pango
    pkg-config
    nodePackages.node-gyp
    libpng
    llvm
    librsvg
    pixman
    giflib
    libjpeg
  ];

    
  # APPEND_LIBRARY_PATH = "${lib.makeLibraryPath [ libGL libuuid google-chrome-dev]}";

  # shellHook = ''
  #   LD=$CC
  #   export LD_LIBRARY_PATH="$APPEND_LIBRARY_PATH:$LD_LIBRARY_PATH"
  # '';

}
EN

回答 1

Stack Overflow用户

发布于 2022-10-28 11:54:31

这篇文章引导我找到了一个解决方案:How can I make macOS frameworks available to clang in a Nix environment?

通过将pkgs.darwin.apple_sdk.frameworks.CoreText添加到我的buildInputs中,将export NIX_LDFLAGS="-F${pkgs.darwin.apple_sdk.frameworks.CoreText}/Library/Frameworks -framework CoreText $NIX_LDFLAGS";添加到我的shellHook中,我能够将/nix/store独立地复制到主机系统中。这就是为什么它最初没有被发现的原因

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74239415

复制
相关文章
如何使用Frelatage对Python代码进行模糊测试
Frelatage是一款基于覆盖率的Python模糊测试工具,在该工具的帮助下,广大研究人员可以轻松对Python代码进行模糊测试。
FB客服
2022/06/08
1.8K0
如何使用Frelatage对Python代码进行模糊测试
使用WireMock进行更好的集成测试
无论您是遵循传统的测试金字塔还是采用诸如“测试蜂窝”这样的较新方法,都应该在开发过程中的某个时候开始编写集成测试用例。您可以编写不同类型的集成测试。从持久性测试开始,您可以检查组件之间的交互,也可以模拟调用外部服务。本文将讨论后一种情况。在谈论WireMock之前,让我们从一个典型的例子开始。
FunTester
2019/12/09
2.5K0
使用WireMock进行更好的集成测试
使用 monkey 对 App 进行压力测试
monkey 是 Android 中的一个命令行工具,由 java 编写,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对 APP 进行压力测试。
顾翔
2020/09/23
1.9K0
使用 monkey 对 App 进行压力测试
使用 Go 对 Nginx 进行性能测试
目前有很多提供Go语言HTTP应用服务的方法,但其中最好的选择取决于每个应用的实际情况。目前,Nginx看起来是每个新项目的标准Web服务器,即使在有其他许多不错Web服务器的情况下。然而,在Nginx上提供Go应用服务的开销是多少呢?我们需要一些nginx的特性参数(vhosts,负载均衡,缓存,等等)或者直接使用Go提供服务?如果你需要nginx,最快的连接机制是什么?这就是在这我试图回答的问题。该基准测试的目的不是要验证Go比nginx的快或慢。那将会很愚蠢。
星哥玩云
2022/06/28
8130
使用JMeter对WebService进行压力测试
现实项目中我们使用了JMeter对WebService进行了压力测试,Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试。
星哥玩云
2022/07/03
1.7K0
使用pgbench对PostgreSQL进行基准测试
TPC-C是经典的衡量在线事务处理(OLTP)系统性能和可伸缩性的基准测试规范。常见的开源数据库的基准测试工具有benchmarksql、 sysbench等,PostgreSQL自带运行基准测试的简单程序pgbench。pgbench是一个类TPC-B 的基准测试工具,可以执行内置的测试脚本,也可以自定义脚本文件。
姚远OracleACE
2023/09/06
1.1K0
使用pgbench对PostgreSQL进行基准测试
使用sysbench对MySQL进行压力测试
​出自percona公司,是一款多线程系统压测工具,可以根据影响数据库服务器性能的各种因素来评估系统的性能。例如,可以用来测试文件IO,操作系统调度器,内存分配和传输速度,POSIX线程以及数据库服务器等。sysbench支持Lua脚本语言,Lua对各种测试场景的设置可以非常灵活。sysbench支持MySQL,操作系统和硬件的测试。
星哥玩云
2022/08/16
2.8K0
使用sysbench对MySQL进行压力测试
如何对机器学习代码进行单元测试?
本文介绍了一种用于机器学习代码的单元测试方法,通过生成数据输入、模型推理、损失计算和优化等步骤,来确保每个组件只在一个步骤中起作用。作者还提供了相应的测试用例和代码示例,以帮助读者更好地理解单元测试的实现过程。同时,作者也提醒读者,单元测试并非万能的,需要结合其他测试方法来全面评估机器学习代码的性能和正确性。
企鹅号小编
2018/01/09
2.5K0
如何对机器学习代码进行单元测试?
使用ab命令对网站进行压力测试
这是apache自带的一个网站压力测试工具,是ApacheBench的缩写,我们可以使用这个工具来对我们的网站进行压力测试
用户5807183
2019/09/16
2K0
Docker Compose进行集成测试
集成测试通常是一项困难的活动,特别是在涉及到分布式系统时。即便正在构建单体应用,也可能需要启动数据库,来进行集成测试。这种事情在早期很容易做到,但随着代码库的增加,难度将呈指数级增长。值得庆幸的是,Docker Compose 使我们能够在运行 Docker 的任何环境中,进行集成测试。
小阑本阑
2023/07/12
2730
Docker Compose进行集成测试
如何对集成树进行解释?
集成树(tree-based ensemble learning)中,最有名的就是随机森林树(Random Forest,简称RF)与梯度提升树(Gradient Boosting Trees,简称GBM)。而近年在Kaggle 竞赛平台中最火红的XGBoost 也是基于GBM 所延伸出来的演算法。在解释集成树有三个非常好用的方法: 特征重要度(Feature Importance) 部分相依图(Partial Dependence Plot,简称PDP) 个体条件期望图(Individual Conditional Expectation Plot,简称ICE Plot) 这三个方法属于「事后可解释性(post hoc)」并且「通用于任何一种演算法模型(model-agnostic)」。
致Great
2020/12/29
1.4K0
Go语言使用gorm对MySQL进行性能测试
之前写过了Go语言gorm框架MySQL实践,其中对gorm框架在操作MySQL的各种基础实践,下面分享一下如何使用gorm框架对MySQL直接进行性能测试的简单实践。
FunTester
2022/04/01
1.1K0
使用 cURL 对Web请求进行性能测试
在做 Web 开发的时候,经常需要对 Web Page 或者 REST-ful API 做简单的 Benchmark。本文将介绍如何使用 cURL 进行简单快速的性能评测。本文内容分为以下两部分:
Debian中国
2018/12/21
2.9K0
如何使用GraphQLmap对GraphQL节点进行渗透测试
GraphQLmap是一个可以跟GraphQL节点交互的脚本引擎,广大研究人员可以使用GraphQLmap来针对GraphQL节点进行渗透测试和安全研究。
FB客服
2021/07/02
1.9K0
使用微信测试账号对网页进行授权
如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。我们在进行公众号网页开发的时候,想要获取用户的基本信息,首先得获取到access_token,从access_token里我们要拿出用户的openid来作为用户在我们系统中的唯一标识,以及通过openid可以保证该用户的只能访问到与其openid相对应的数据,防止越权漏洞。因此,我们需要对网页进行授权,否则是无法在获取到用户的openid的。
端碗吹水
2020/09/23
4.2K0
使用微信测试账号对网页进行授权
Redis 如何使用HyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 数据结构,用来做基数统计,其优点是在输入元素的数量非常大时,计算基数所需的空间比较小并且一般比较恒定。
smartsi
2019/12/02
7830
点击加载更多

相似问题

MySQLSHOW抑制Bash脚本中的警告

10

mysqlshow中缺少mySQL数据库

11

(动态)生成一个包含X数量行和Y数量列的表

16

表的数量

113

包含产品销售和数量的表-添加计算产品数量的列

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文