Wifi P2p技术研究
没找到相关源码,先用这位大神的方案把,我用的是
clion.2019.1.
idea.2019.3.2
大概也就能用到2089年把…
需要翻墙: https://zhile.io/2018/08/25/jetbrains-license-server-crack.html
clion只支持cmake.
当然cmake语法是很重要的了.
直接写CMakeLists.txt.
但用clion导入原有makefile工程是有技巧的,不然没法补全,没法build
.
File->
New CMake project from sources->
Import as CMake project->
Import as new Cmake project
会生成导入了各种.cpp/.h的基础CMakeLists.txt,并且可以直接在ide build/debug等
然后基于CMakeLists.txt做自己的修改,比如so库,生成bin等等.
一切的艰难困苦,不再言表.
这里代表了我曾经前进的方向,我希望我能坚持.
不再设具体目标, 能写来若干文字已不易.
只愿命运温和待我.
以后多谢谢产品性质的文章,锻炼产品思维,练练文笔,都有好处。
autoload就是代替手动的include/require
:
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
执行上面的时候,自动调用1个方法来require.
具体地,通过spl_autoload_register
将想要调用的函数注册到1个队列里,
系统会执行队列的所有注册回调,去加载真正的类文件.
spl_autoload_register(array('ComposerAutoloaderInit063adac3dfb9af8e4cef0fc21a448d00', 'loadClassLoader')
上面是loadCloassLoader
:
就是3个要素:
1 类名
2 对应的文件名
3 require的动作
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
上面其实就是整个composer自动加载的第1个类,是个statis变量,
位于auload_real.php
:
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
这个loader是一开始就会调用的
//index.php
require __DIR__.'/../vendor/autoload.php';
//autoload.php
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit063adac3dfb9af8e4cef0fc21a448d00::getLoader();
//autoload_real.php
//getLoader:
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit063adac3dfb9af8e4cef0fc21a448d00', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit063adac3dfb9af8e4cef0fc21a448d00', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit063adac3dfb9af8e4cef0fc21a448d00::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
}
$map = require __DIR__ . '/autoload_psr4.php';
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
//核心require在这里.
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInit063adac3dfb9af8e4cef0fc21a448d00::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire063adac3dfb9af8e4cef0fc21a448d00($fileIdentifier, $file);
}
return $loader;
}
}
register:
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
loadClass:
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
includeFile($file);
return true;
}
}
loadClass函数就是实现上面核心三点.
可以看到vendor/composer
多了很多自动生成的文件:
├── autoload_classmap.php
├── autoload_files.php
├── autoload_namespaces.php
├── autoload_psr4.php
├── autoload_real.php
├── autoload_static.php
├── ClassLoader.php
├── installed.json
└── LICENSE
整个跟composer包里的配置是相关的,把composer.json和子包里的composer.json与autoload相关的json设置都导入到了上面的几个文件(php)里:
"autoload": {
"files": [
"app/helpers.php"
],
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"Zhiyi\\Plus\\": "app/"
}
},
一共4种模式: https://my.oschina.net/sallency/blog/893518https://my.oschina.net/sallency/blog/893518
只有有个困惑composer dump-autoload
不知道干嘛的,现在很清楚了,就是在autoload规则发生变化后,自动生成composer下新的映射php文件
electron不能再wsl下跑,还是只能windows下安装node.js
就按文档来好了,分发打包用electron-forge
,记得都全局安装.yarn安装不上就换npm就好
这个算是最佳工程实践了
但是依赖vue-cli 2,安装个全局的.
https://github.com/SimulatedGREG/electron-vue
node-hid
是node.js访问usb的包,肯定依赖libusb这样的底层c/c++库,node下编译工具是node-gyp.
这货又依赖各种windows-build-tool: 看node-gyp文档:https://github.com/nodejs/node-gyp
期间还需要用python2,于是用conda创建环境,遇到了个问题无法activate
,输入命令:
conda init powershell
conda create python=python2.7 name=py27
conda activate py27
上面那个只能针对hid设备.
node.js封装的libusb才是最好用的
yarn add usb