Порядок, в котором связаны библиотеки, имеет значение, если библиотеки зависят друг от друга. В общем случае, если библиотека A
зависит от библиотеки B
, тогда libA
ДОЛЖЕН появляться перед libB
в флагах компоновщика.
Например:
// B.h
#ifndef B_H
#define B_H
struct B {
B(int);
int x;
};
#endif
// B.cpp
#include "B.h"
B::B(int xx) : x(xx) {}
// A.h
#include "B.h"
struct A {
A(int x);
B b;
};
// A.cpp
#include "A.h"
A::A(int x) : b(x) {}
// main.cpp
#include "A.h"
int main() {
A a(5);
return 0;
};
Создайте библиотеки:
$ g++ -c A.cpp
$ g++ -c B.cpp
$ ar rvs libA.a A.o
ar: creating libA.a
a - A.o
$ ar rvs libB.a B.o
ar: creating libB.a
a - B.o
Скомпилируйте:
$ g++ main.cpp -L. -lB -lA
./libA.a(A.o): In function `A::A(int)':
A.cpp:(.text+0x1c): undefined reference to `B::B(int)'
collect2: error: ld returned 1 exit status
$ g++ main.cpp -L. -lA -lB
$ ./a.out
Чтобы повторить снова, порядок имеет значение!
Для SELECT вы можете использовать конструкцию FOUND_ROWS
, описанную здесь ):
SELECT SQL_CALC_FOUND_ROWS something FROM your_table WHERE whatever;
SELECT FOUND_ROWS( ) ;
, которая вернет число строк в последнем запросе SELECT
или если первый запрос имеет предложение LIMIT
, он возвращает количество строк, которые были бы без LIMIT
).
Для UPDATE
/ DELETE
/ INSERT
это ROW_COUNT конструкция
INSERT INTO your_table VALUES (1,2,3);
SELECT ROW_COUNT();
, которая вернет количество затронутых строк.
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
Подробнее об этом здесь
Существует другой способ:
CREATE TEMPORARY TABLE `results` AS ( *** Your query without LIMIT *** );
Получить количество строк
SELECT COUNT(*) FROM `results`;
Получить подмножество
SELECT * FROM `results` LIMIT 5,10;
Временная таблица существует только в текущей сессии. После этого я все равно буду очищать
DROP TEMPORARY TABLE `results`;
Самый простой способ - использовать переменную:
mysql> SELECT @rowcount:=COUNT(*) FROM my_table;
mysql> SELECT @rowcount;
Или вы можете использовать конструкцию FOUND_ROWS()
после размещения SQL_CALC_FOUND_ROWS в инструкции SELECT.
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM my_table;
mysql> SELECT FOUND_ROWS();