我创建了一个新的存储库:
git init
echo "# MESSAGE" >> README.md
git add README.md
git commit -m "first commit"
Run Code Online (Sandbox Code Playgroud)
然后我想将我的提交推送到在github上创建的空远程存储库,所以我必须设置远程.
使用以下命令有什么区别?:
git remote add origin git@github.com:User/UserRepo.git
git remote set-url origin git@github.com:User/UserRepo.git
Run Code Online (Sandbox Code Playgroud)
最后我执行推送:
git push -u origin master
Run Code Online (Sandbox Code Playgroud)
EDIT1:
当我在git init之后调用remote set-url origin时会发生什么?远程set-url origin是否创建了origin?如果在git init之后已经存在origin,那么在我的场景中使用这些命令没有区别,对吧?
我使用QtCreator打开CMake项目.除了CMakeLists.txt之外的一些目录仅包含头文件*.h,对于那些目录,项目树视图中的QtCreator仅显示CMakeLists.txt.如何解决?我需要查看来自QtCreator的所有项目文件.
我试图理解"指向成员的指针"是如何工作的,但对我来说并非一切都清楚.
这是一个示例类:
class T
{
public:
int a;
int b[10];
void fun(){}
};
Run Code Online (Sandbox Code Playgroud)
以下代码说明问题并包含问题:
void fun(){};
void main()
{
T obj;
int local;
int arr[10];
int arrArr[10][10];
int *p = &local; // "standard" pointer
int T::*p = &T::a; // "pointer to member" + "T::" , that is clear
void (*pF)() = fun; //here also everything is clear
void (T::*pF)() = T::fun;
//or
void (T::*pF)() = &T::fun;
int *pA = arr; // ok
int T::*pA = T::b; // error
int (T::*pA)[10] …
Run Code Online (Sandbox Code Playgroud) 我在 linux 上使用 gcc 4.8.5。我想使用地址消毒剂,但它不返回有关该程序的任何信息。标志:
SET(CMAKE_CXX_FLAGS "-Wall -Wno-error -g -std=c++11 -fno-omit-frame-pointer -fsanitize=address")
SET(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
Run Code Online (Sandbox Code Playgroud)
链接库:
target_link_libraries(testcpp asan)
Run Code Online (Sandbox Code Playgroud)
有内存泄漏的测试程序:
int main()
{
int *prt = new int;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
怎么了 ?
我在 CONFIG 模式下使用 find_package 来查找 Qt5:
find_package(Qt5 CONFIG REQUIRED COMPONENTS Core)
Run Code Online (Sandbox Code Playgroud)
我没有指定 CMAKE_PREFIX_PATH 并且/home/user/Qt/5.5/gcc_64/bin
没有在 PATH 中设置,但是 cmake 找到了 *Config.cmake 文件:
/home/user/Qt/5.5/gcc_64/lib/cmake/Qt5/Qt5Config.cmake
/home/user/Qt/5.5/gcc_64/lib/cmake/Qt5Core/Qt5CoreConfig.cmake
Run Code Online (Sandbox Code Playgroud)
它是如何工作的 ?cmake 如何创建搜索路径?
编辑1
我阅读了一份文档,但我不清楚:
<prefix>/(lib/<arch>|lib|share)/cmake/<name>*/ (U)
<prefix>/(lib/<arch>|lib|share)/<name>*/ (U)
<prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/ (U)
Run Code Online (Sandbox Code Playgroud)
前缀是什么?上述模式如何与 Qt 路径匹配?:
/home/user/Qt/5.5/gcc_64/lib/cmake/Qt5/Qt5Config.cmake
Run Code Online (Sandbox Code Playgroud)
我为我的图书馆创建了一个类似的路径:
/home/user/Mylib/1.0/gcc_64/lib/cmake/Mylib1/Mylib1Config.cmake
Run Code Online (Sandbox Code Playgroud)
但find_package(Mylib1 CONFIG)
返回错误:
CMake Warning at CMakeLists.txt:14 (find_package):
Could not find a package configuration file provided by "Mylib1" with any
of the following names:
Mylib1Config.cmake
mylib1-config.cmake
Add the installation prefix of "Mylib1" to CMAKE_PREFIX_PATH or set
"Mylib1_DIR" to …
Run Code Online (Sandbox Code Playgroud) 在我的项目中,我想使用来自非官方opengl sdk的freeglut库。
我使用Premake为vs2010生成了构建文件。然后,我构建了所有库(调试)。在我的项目中,我为freeglut设置了其他包含目录,其他库目录。在其他依赖项中,我添加了freeglutD.lib。
在代码中,我只包含一个freeglut标头。当我想运行程序时,出现错误:
>LINK : fatal error LNK1104: cannot open file 'freeglut.lib'.
Run Code Online (Sandbox Code Playgroud)
freeglutD.lib是中的唯一文件sdk/freeglut/lib
。在SDK中没有freeglut.dll
和freeglut.lib
。
早些时候,我从链接中使用了freeglut 2.8.0 MSVC软件包,该链接是动态链接的(包含freeglut.dll),并且一切正常。
怎么了 ?
之间有什么区别:
namespace Ui
{
class T;
}
class T
{
//some content
};
Run Code Online (Sandbox Code Playgroud)
和
namespace Ui
{
class T
{
//some content
};
}
Run Code Online (Sandbox Code Playgroud)
我使用 Qt Creator,并且在为 Qt Gui 应用程序生成的默认代码中使用了第一个构造。在示例项目中,我有两个类:class MyDialog : public QDialog和class MainWindow : public QMainWindow它们中的每一个都在私有部分包含一个指向该类的指针:
class T: public Q
{
private:
Ui::T *pointer;
}
Run Code Online (Sandbox Code Playgroud)
这种建设的目的是什么?当 MainWindow 类还包含指向 MyDialog 类的指针时,该指针不能包含Ui::限定符:
private:
Ui::MainWindow *ui;
MyDialog *mDialog;
Run Code Online (Sandbox Code Playgroud)
为什么 ?
我有两个由单独线程调用的函数:
void SetPtr(T* ptr_)
{
ptr = ptr_;
}
void Process()
{
if(ptr != nullptr)
{
ptr->fun(); // fun() can call Process() again
}
}
Run Code Online (Sandbox Code Playgroud)
我知道在SetPtr
有人可以调用之前调用Process
,但是因为这些函数是由单独的线程调用的,所以内存可能不会同步,即可能会Process
看到初始ptr
值或可能尝试读取ptr
未完全写入的值。我可以用来std::lock_quard
提供同步,但我想看看其他可能性。对于这种情况,还有哪些其他方法可以提供内存同步?
Edit1 当可以随时调用 SetPtr 时如何同步内存(没有互斥)?
Edit2 ptr, SetPtr and Process
属于同一个类,ptr初始设置为nullptr
我想从这个站点编译一个示例代码(在底部).我下载了GLFW 3.0.4源代码,并将其构建在自定义位置.我使用默认设置,GLFW构建为静态库.我的CMakeLists.txt看起来像这样:
cmake_minimum_required(VERSION 2.8)
project(glfw_test_project)
SET(CMAKE_CXX_FLAGS "-Wall -Werror -g -std=c++11")
find_package(OpenGL REQUIRED)
include_directories(/home/user/MyLibs/OpenGL/glfw-3.0.4/include)
link_directories(/home/user/MyLibs/OpenGL/glfw-3.0.4/build/src)
add_executable(glfw_test main.cpp)
target_link_libraries(glfw_test ${OPENGL_gl_LIBRARY})
target_link_libraries(glfw_test glfw3)
Run Code Online (Sandbox Code Playgroud)
当我运行make时,我得到以下信息:
Linking CXX executable glfw_test
/usr/bin/ld: /home/user/MyLibs/OpenGL/glfw-3.0.4/build/src/libglfw3.a(x11_clipboard.c.o): undefined reference to symbol 'XConvertSelection'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [glfw_test] Error 1
make[1]: *** [CMakeFiles/glfw_test.dir/all] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
怎么了 ?
Edit1 当我将GLFW构建为动态库时,一切正常.然后我的CMakeLists.txt中的最后一行必须替换为:
target_link_libraries(glfw_test glfw)
Run Code Online (Sandbox Code Playgroud)
使用静态库时出了什么问题?
我想为垂直地看着地面的相机创建一个视图矩阵:
glm::mat4 matrix = glm::lookAt(glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
Run Code Online (Sandbox Code Playgroud)
最后一个参数是全局向上向量,所以一切似乎都是正确的,但我得到了跟随matirx:
-nan -nan -0 0
-nan -nan 1 0
-nan -nan -0 0
nan nan -1 1
Run Code Online (Sandbox Code Playgroud)
我想我得到了nan,因为看向量与向量平行,但是如何使用glm :: lookAt函数构建正确的视图矩阵.