git log --oneline --decorate 的格式在哪里定义的?
使用 git Iog --format=format:'my format',我无法重现 git log --oneline --decorate 所示的分支、标签和 HEAD 的颜色。
git log --oneline --decorate
Run Code Online (Sandbox Code Playgroud)
浅蓝色显示 HEAD,绿色显示分支名称,棕色显示标点符号 (,,)。
我最接近得到我想要的东西是:
git log --graph --abbrev-commit --decorate --date=short --format=format:'%C(bold blue)%h%C(reset) %C(bold green)%ad%C(reset)%d %C(white)%s%C(reset)' -20
Run Code Online (Sandbox Code Playgroud)
唯一的区别是分支/HEAD/标签的颜色与上一个命令不同。
好吧,我正在制作一个小型电话簿应用程序,我已经决定使用地图将是最好的数据结构,但我不知道从哪里开始.(必须从头开始实施数据结构 - 学校工作)
首先:是boost ::不可复制还是booster ::不可复制。我在不同的地方见过。
为什么要使一类不可复制?您可以举一些示例用例吗?
我一直在寻找一段时间,但无法找到这个看似简单的问题的明确答案:int的默认长度是多少?
我知道默认情况下会签署一个int.但它是短期还是长期?
根据以下页面中的"基本数据类型"表,默认情况下int是一个long int(4个字节). http://www.cplusplus.com/doc/tutorial/variables/
它总是正确的,还是取决于操作系统(32位/ 64位),编译器还是其他东西?
我刚刚开始使用Qt库.我正在尝试使用以下标头编译我的第一个测试脚本:
#include <qwebview.h>
Run Code Online (Sandbox Code Playgroud)
但它不会编译:
g++ main.cpp -o run.main
main.cpp:2:22: error: qwebview.h: No such file or directory
main.cpp: In function ‘int main()’:
main.cpp:10: error: ‘QWebView’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
我的Linux Kubuntu机器上安装了libs:
$ locate qwebview
/usr/include/qt4/Qt/qwebview.h
/usr/include/qt4/QtWebKit/qwebview.h
/usr/lib/qt4/plugins/designer/libqwebview.so
Run Code Online (Sandbox Code Playgroud)
我跑了ldconfig一次以确保(我认为)可以看到libs,但显然,这还不够.
如何设置我的机器以便我可以开始使用Qt编译软件?
我花了几天阅读并重新阅读我在这个主题上找到的每一个教程,花了几个小时(甚至几天)在这里浏览相关问题,但我仍然无法让以下工作.如果这是重复的话,请接受我的道歉:我有可能多次看到并重读了重复的问题,但无法理解答案与我的问题的相关性.随着那个...
我正在尝试为我的应用程序实现插件架构.插件编译并作为库安装.在运行时,Application然后使用dlopen()/ dlsym()加载并链接到插件的函数.
想法是插件(库)将实现一组函数以将数据返回到主Application,或者操纵从Application传递的数据.
为了测试这个想法,我试图实现一个函数(插件内部),该函数将返回插件本身的(人类可读)名称(作为std :: string).我认为这将是一件简单的事情....: - /
这是我到目前为止所得到的:
// Plugin.cpp
extern "C" void plugin_name(std::string *name) {
name = new std::string("Example plugin name");
}
// Application.cpp
void* handle = dlopen("libplugin.so", RTLD_LAZY);
typedef void (*plugin_t)(std::string*);
dlerror(); // Reset errors.
plugin_t call_plugin_name = (plugin_t) dlsym(handle, "plugin_name");
// ... Some error handling code.
std::string my_plugin_name;
call_plugin_name(&my_plugin_name);
dlclose(handle);
// More code that displays my_plugin_name.
Run Code Online (Sandbox Code Playgroud)
我已经尝试了许多不同的组合,包括一个看起来更直接(但没有更好的工作)的插件名称返回的组合:
// Plugin.cpp
extern "C" std::string plugin_name(void) {
return std::string("Example plugin name");
}
Run Code Online (Sandbox Code Playgroud)
我知道我很接近:代码编译,应用程序停止崩溃;)
但是,我有一个空的空间,我希望看到实际的插件名称.
到目前为止,我读过的所有教程都非常快速地通过两种方式传递数据的机制:plugin <=> Application.我正在尝试使用"简单"的std :: …
http://pstreams.sourceforge.net/ pstreams显然是一个非常简单的库,为C++重新实现了popen().
该库安装非常简单,只包含一个头文件.您可以在此处下载头文件并将其添加到您的应用程序中:http:
//pstreams.cvs.sourceforge.net/viewvc/pstreams/pstreams/pstream.h?view = log
我认为我想要的非常简单:向系统发送命令并获取其输出.pstreams的主页(上图)和文档提供了以下示例:
redi::ipstream in("ls ./*.h");
std::string str;
while (in >> str) {
std::cout << str << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它似乎运行良好,但代码实际上从输出中剥离所有空格和回车.试试这个:
redi::ipstream in("ls -l"); /* The command has a slightly more complicated output. */
std::string str;
while (in >> str) {
std::cout << str
}
std::cout << std::endl;
Run Code Online (Sandbox Code Playgroud)
我们得到一个没有任何空间的looong连接字符串.
我尽力理解文档,最接近解决方案的是:
redi::ipstream in("ls -l");
std::string str;
while (!in.rdbuf()->exited()) {
in >> str;
}
std::cout << str << std::endl;
Run Code Online (Sandbox Code Playgroud)
但是,输出在第一个空格处完全截断.
我受到了阻碍.
相关问题:
c ++中的popen等价
如何使用POSIX执行命令并在C++中获取命令输出?
主持人请注意:此问题和上述其他两个问题需要pstreams标记.
git diff --staged 允许您查看 HEAD 和暂存更改之间的更改。
如果我要提交暂存的更改,如何查看 HEAD 中存在的完整文件?如何查看其中的特定行子集?
cmake使用适当的soname版本和相关符号链接创建和安装共享对象的所有必要条件是什么?
我最近升级了我的系统,以前与cmake 2.8兼容的系统不再与cmake 3.7兼容。我检查了最新的文档,但对于我的问题,我却听不懂。
我以前安装过.so文件,除了符号链接之外,还安装了具有完整版本的真实.so文件。
pluginname.so.1 => pluginname.so.1.1.0
pluginname.so.1.1.0
Run Code Online (Sandbox Code Playgroud)
现在,cmake只构建并安装 pluginname.so,而没有任何版本后缀或符号链接。
我不在任何地方使用NO_SONAME:https ://cmake.org/cmake/help/v3.7/prop_tgt/NO_SONAME.html#prop_tgt:NO_SONAME
add_library(${PLUGIN_NAME} MODULE ${SRC})
# I call message(...) to check that the values are indeed set:
message("plugin ${PLUGIN_NAME}")
message("version ${CORE_MAJOR_VERSION}.${PLUGIN_MAJOR_VERSION}.${PLUGIN_BUGFIX_VERSION}")
message("soversion: ${CORE_MAJOR_VERSION}")
message("prefix ${PLUGIN_PREFIX}")
if (NOT NO_SONAME)
message("Ok, no_soname is not set!")
endif()
set_target_properties(${PLUGIN_NAME} PROPERTIES
VERSION ${CORE_MAJOR_VERSION}.${PLUGIN_MAJOR_VERSION}.${PLUGIN_BUGFIX_VERSION}
SOVERSION ${CORE_MAJOR_VERSION}
PREFIX ${PLUGIN_PREFIX}
)
install(TARGETS ${PLUGIN_NAME} DESTINATION ${PLUGIN_INSTALL_DIR})
Run Code Online (Sandbox Code Playgroud)
还有哪些其他调试策略可以在这里工作?
我曾试图改变add_library($ {} PLUGIN_NAME MODULE $ {} SRC)线更换模块与共享关系,但它似乎不有所作为。
什么是PHP的is_dir()的C++等价物?
http://www.php.net/manual/en/function.is-dir.php
bool is_dir(string $ filename)
判断给定的文件名是否是目录.
仅在Linux平台上工作,您将使用哪个库?
如果跨平台支持很重要,您会使用什么方法?
我在Kubuntu上正确安装了一个软件.
现在,我正在修补和测试它的一些库.
如何从bash启动软件,以便加载我的修补库而不是官方库?
例如:
官方的lib定位/ usr/lib中/
我的补丁库(测试开发过程中使用)是在/ home /用户的/ dev/lib目录/
我试过了:
$ set LD_LIBRARY_PATH=/home/user/dev/lib/
$ binary_app &
Run Code Online (Sandbox Code Playgroud)
但无济于事.
我倒认为可以从庆典中设置一个解决方案,但如果它是不可能的,我还可以修改这个C++软件的cmake的文件.
目的是允许我使用vanilla libs轻松启动应用程序,或者使用我的修补库来查看差异.
编辑:这是一个KDE .so文件
我正在测试的库是一个KDE4库.官方lib位于/ usr/lib/kde4 /中.在该目录中,没有任何库以lib前缀开头.
我是否这样做:
/lib/ld-linux-x86-64.so.2 --list --library-path PATH EXEC
Run Code Online (Sandbox Code Playgroud)
要么
ldd EXEC
Run Code Online (Sandbox Code Playgroud)
图书馆根本没有列出.
另一方面,如果将原始库从/ usr/lib/kde4 /移开,则应用程序启动但缺少相应的功能.
KDE4库是否以特定方式加载?也许要设置的变量是不同的......
编辑2
所有的答案都很好而且很有用......不幸的是,事实证明这个问题似乎与lib路径设置无关.我正在处理插件架构,并且.so加载路径似乎在应用程序的某处硬编码.我需要在源代码中花费更多时间来了解正在发生的事情......谢谢,并且+1给所有人.
我读高级Linux编程第2章:
http://www.advancedlinuxprogramming.com/alp-folder/alp-ch02-writing-good-gnu-linux-software.pdf
在本节中2.1.3 Using getopt_long,有一个示例程序有点像这样:
int main (int argc, char* argv[]) {
int next_option;
// ...
do {
next_option = getopt_long (argc, argv, short_options, long_options, NULL);
switch (next_option) {
case ‘h’: /* -h or --help */
// ...
}
// ...
Run Code Online (Sandbox Code Playgroud)
引起我注意的是next_option被声明为int.函数getopt_long()显然返回表示其在下面的switch语句中使用的短命令行参数的int.为什么可以将该整数与switch语句中的字符进行比较?
是否有从char(单个字符?)到int的隐式转换?上面的代码如何有效?(参见链接pdf中的完整代码)
我的 CMS 升级有以下查询:
ALTER IGNORE TABLE locales_target ADD PRIMARY KEY (language, lid, plural)
Run Code Online (Sandbox Code Playgroud)
它失败的原因是:“键'PRIMARY'的重复条目'1-0'”。
我实际上在上面的查询中添加了 IGNORE ,但它没有帮助,因为表使用 InnoDB 引擎,所以实际上并没有忽略错误。
此页面显示如何查找违反唯一约束的重复行:http : //www.tocker.ca/2013/11/06/the-future-of-alter-table-ignore-syntax.html
SELECT GROUP_CONCAT(id), emailaddress, count(*) as count FROM users
GROUP BY emailaddress HAVING count >= 2;
Run Code Online (Sandbox Code Playgroud)
但它是针对一个独特的领域。如何使用 3 字段主键查找重复行?
编辑:原始问题仍然存在,但这里有更多信息和更多相关问题:
1) '1-0' 在错误信息中代表什么?没有盖子 == 0 的行!
2)以下查询突出显示了部分问题:
mysql> select lid, count(*) as count from france_locales_target group by lid having count != 1;
+------+-------+
| lid | count |
+------+-------+
| 1 | 2 |
| 2 | 2 …Run Code Online (Sandbox Code Playgroud)