我想从一个简单的链接用法开始解释我的问题.让我们假设有一个库z可以编译为共享库libz.dll(D:/libs/z/shared/libz.dll)或静态库libz.a(D:/ libs/z/static/libz.一个).
让我想链接它,然后我这样做:
gcc -o main.exe main.o -LD:/libs/z/static -lz
Run Code Online (Sandbox Code Playgroud)
根据这个文档,gcc将搜索libz.a,即
归档文件,其成员是目标文件
我也可以做以下事情:
gcc -o main.exe main.o -LD:/libs/z/shared -lz
Run Code Online (Sandbox Code Playgroud)
在上面的文档中没有提到-l标志将搜索lib<name>.so.
如果我libz.a和libz.dll将在同一目录中会发生什么?图书馆如何与计划挂钩?为什么我需要标志-Wl,-Bstatic,-Wl,-Bdynamic如果-l搜索共享和静态库?
如果我编译共享库分发,为什么有些开发人员为.a文件提供相同模块的.dll文件?
例如,Qt在bin目录中提供.dll文件,其中包含lib目录中的.a文件.它是同一个库,但分别构建为共享和静态?或.a文件是某种虚拟库,提供与共享库的链接,其中有真正的库实现?
另一个例子是Windows上的OpenGL库.为什么每个编译器都必须在MingW中提供类似libopengl32.a的静态OpenGL库?
什么是.dll.a和.la扩展名用于的文件?
PS这里有很多问题,但我认为每个问题都取决于前一个问题,没有必要将它们分成几个问题.
这个网站上的第一个计时器,所以这里..
我是C++的新手,我目前正在阅读"DS Malik的数据结构使用C++第二版"一书.
在书中,Malik提供了两种创建动态二维数组的方法.在第一种方法中,将变量声明为指针数组,其中每个指针都是整数类型.恩.
int *board[4];
Run Code Online (Sandbox Code Playgroud)
..然后使用for循环创建'列',同时使用指针数组作为'行'.
第二种方法,您使用指针指针.
int **board;
board = new int* [10];
Run Code Online (Sandbox Code Playgroud)
等等
我的问题是:哪种方法更好?**方法对我来说更容易可视化,但第一种方法可以大致相同的方式使用.两种方式都可用于制作动态二维数组.
编辑:上面的帖子不够清楚.这是我尝试过的一些代码:
int row, col;
cout << "Enter row size:";
cin >> row;
cout << "\ncol:";
cin >> col;
int *p_board[row];
for (int i=0; i < row; i++)
p_board[i] = new int[col];
for (int i=0; i < row; i++)
{
for (int j=0; j < col; j++)
{
p_board[i][j] = j;
cout << p_board[i][j] << " ";
}
cout << endl;
}
cout << …Run Code Online (Sandbox Code Playgroud) 我正在使用Ubuntu 13.04并使用安装了mingw-w64 apt-get install mingw-w64.我可以使用以下命令编译和链接我的程序的64位工作版本:
x86_64-w64-mingw32-g++ code.cpp -o app.exe
Run Code Online (Sandbox Code Playgroud)
这会生成一个64位的app.exe文件.
我使用什么二进制或命令行标志来生成32位版本的app.exe?
首先,我遵循了"入门:构建和运行Clang".特别是,我根据"使用Visual Studio"部分构建了它.换句话说,我使用Visual Studio 2010构建它.
其次,我手动设置MinGW发行版的包含和库路径:

我正在尝试编译的简单程序:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我从编译器得到以下反馈:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iostream:39:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ostream:39:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ios:38:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iosfwd:41:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\bits/postypes.h:41:
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:144:11: error: no member named 'fgetws' in the global namespace
using ::fgetws;
~~^
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:146:11: error: no member named 'fputws' in the global namespace
using ::fputws;
~~^
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:150:11: error: no …Run Code Online (Sandbox Code Playgroud) 有谁知道Win-builds和MinGW-builds之间的区别?我对Windows的C++ 11(14)编译器非常感兴趣,但遗憾的是MSVC尚未完全符合C++ 11标准.
我不知道为什么,但是这个话题似乎记录不清,并且充满争议,因为没有人知道真正的答案(除了Moolenaar先生,他很少回答).
所以基本上我已经在这里提出了一个讨论,它很快就死了,可能是因为在Windows上没有太多人在终端模式下使用Vim.
我的编码设置如下:
if has('multi_byte')
if empty(&termencoding)
let &termencoding = &encoding
endif
let &encoding = 'utf-8'
let &fileencoding = 'utf-8'
endif
Run Code Online (Sandbox Code Playgroud)
当然,我在GVim下运行没有问题:可以输入任何字符,而我Consolas对Powerline的补丁工作得很好.当我尝试在终端模式下运行Vim时,问题就出现了.我使用ConEmu,一个功能丰富的Windows终端模拟器.它声称正式支持Unicode开箱即用.例如,我可以运行以下测试脚本:
chcp 65001 & (cmd /c type "%~dpn0.cmd") & pause & goto :EOF
English: texts, web pages and documents
Graves,etc: à á â ã ä å æ ç è é ê ë ì í î ï
Greek: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个远程桌面控制应用程序.显然,它由客户端和服务器部分组成:
服务器:
客户:
考虑发送屏幕截图.当我使用家用PC作为服务器时 - 我最终获得了1920x1080的屏幕截图尺寸.通过使用JAI Image I/O Tools并将其编码为PNG,我能够为这样一个大图像获得以下统计数据:
因此,根据#1 - 理想的可能FPS应为~5.
不幸的是,我甚至无法达到~5 FPS,甚至不能达到2 FPS.我搜索了瓶颈,发现对套接字I/O流的写入/读取需要大约2秒(参见附录1和2以进行说明).当然这是不可接受的.
我对这个主题进行了一些研究 - 并在两侧增加了套接字I/O流(带BufferedInputStream和BufferedOutputStream)的缓冲.我从64 KB大小开始.这确实提高了性能.但仍然不能拥有至少2个FPS!另外,我已经尝试了Socket#setReceiveBufferSize并且Socket#setSendBufferSize速度有一些变化,但我不知道它们的行为究竟如何,因此我不知道使用哪些值.
看初始化代码:
服务器:
ServerSocket serverSocket = new ServerSocket();
serverSocket.setReceiveBufferSize( ? ); // #1
serverSocket.bind(new InetSocketAddress(...));
Socket clientSocket = serverSocket.accept();
clientSocket.setSendBufferSize( ? ); // #2
clientSocket.setReceiveBufferSize( ? ); // #3
OutputStream outputStream = …Run Code Online (Sandbox Code Playgroud) 我想知道对运营商的呼叫delete是否同步.换句话说,如果我这样做:
delete p;
Run Code Online (Sandbox Code Playgroud)
C++标准是否保证只有在此调用完成执行后才释放内存?或者是调用是异步的,并且只要它决定最好的时间,它就会安排OS的任务释放这个内存吗?
如果第一种情况是有效的,那么它是否意味着我们必须实现我们自己的异步删除工具?我问,因为我会说大多数时候我们(程序员)不关心内存是否完全释放,因此我们不希望我们的代码冻结并等待这个(最有可能是昂贵的?)系统调用完成,而是安排删除任务并立即继续执行.C++是否提供任何标准功能(可能通过标准库?)来完成此操作而无需重新发明轮子?
让我们立刻从pre-receive我已经写过的一个钩子开始:
#!/bin/sh
##
format_bold='\033[1m'
format_red='\033[31m'
format_yellow='\033[33m'
format_normal='\033[0m'
##
format_error="${format_bold}${format_red}%s${format_normal}"
format_warning="${format_bold}${format_yellow}%s${format_normal}"
##
stdout() {
format="${1}"
shift
printf "${format}" "${@}"
}
##
stderr() {
stdout "${@}" 1>&2
}
##
output() {
format="${1}"
shift
stdout "${format}\n" "${@}"
}
##
error() {
format="${1}"
shift
stderr "${format_error}: ${format}\n" 'error' "${@}"
}
##
warning() {
format="${1}"
shift
stdout "${format_warning}: ${format}\n" 'warning' "${@}"
}
##
die() {
error "${@}"
exit 1
}
##
git() {
command git --no-pager "${@}"
}
##
list() {
git rev-list …Run Code Online (Sandbox Code Playgroud) 昨天我遇到了痛苦,让我感到沮丧24小时.问题归结为随机发生的意外崩溃.更复杂的是,调试报告也具有绝对随机的模式.更复杂的是,所有调试跟踪都会导致随机 Qt源或本机DLL,即证明每次问题都不在我身边.
这里有几个这样可爱的报告的例子:
Program received signal SIGSEGV, Segmentation fault.
0x0000000077864324 in ntdll!RtlAppendStringToString () from C:\Windows\system32\ntdll.dll
(gdb) bt
#0 0x0000000077864324 in ntdll!RtlAppendStringToString () from C:\Windows\system32\ntdll.dll
#1 0x000000002efc0230 in ?? ()
#2 0x0000000002070005 in ?? ()
#3 0x000000002efc0000 in ?? ()
#4 0x000000007787969f in ntdll!RtlIsValidHandle () from C:\Windows\system32\ntdll.dll
#5 0x0000000000000000 in ?? ()
Run Code Online (Sandbox Code Playgroud)
warning: HEAP: Free Heap block 307e5950 modified at 307e59c0 after it was freed
Program received signal SIGTRAP, Trace/breakpoint trap.
0x00000000778bf0b2 in ntdll!ExpInterlockedPopEntrySListFault16 () from …Run Code Online (Sandbox Code Playgroud) c++ ×6
mingw ×4
windows ×3
gcc ×2
32-bit ×1
32bit-64bit ×1
arrays ×1
asynchronous ×1
c++11 ×1
clang ×1
clang-format ×1
destructor ×1
git ×1
git-daemon ×1
githooks ×1
java ×1
linux ×1
llvm ×1
mingw-w64 ×1
networking ×1
performance ×1
pimpl-idiom ×1
pointers ×1
qt ×1
sh ×1
sockets ×1
terminal ×1
unicode ×1
vim ×1
winapi ×1